Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.16 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 Kolędy 0 9495 552675 404226 2026-08-21T10:12:12Z CommonsDelinker 1569 Replacing Johansen_Viggo_-_Radosne_Boże_Narodzenie.jpg with [[File:Viggo_Johansen_-_Glade_jul_-_1891.jpg]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: [[:c:COM:FR|File renamed]]: [[:c:COM:FR#FR4|Criterion 4]] (harmonizing names of file set)). 552675 wikitext text/x-wiki <center><div class="noprint" style="clear: center; border: solid #aaa 1px; margin: 0 0 1em 1em; font-size: 100%; background: #f9f9f9; width: 80%; padding: 4px; text-align: center"> Uwaga! To jest archiwalna wersja podręcznika, który jest w trakcie przenoszenia na łamy serwisu Wikiźródła: [[s:Kolędy|Kolędy]]. Jeśli posiadasz chęci uzupełnienia treści zbioru kolęd, historii z nimi związanych prosimy o przejście na stronę projektu Wikiźródeł [[s:Kolędy|Kolędy]] lub napisz swoje sugestie dotyczące podręcznika na stronie [[Dyskusja:Kolędy|stronie dyskusji]]. </div></center> {{status|-100%|Muzyka}} <center><b><big><big>KANCJONAŁ BOŻONARODZENIOWY</big><br/>... przez Wikiskrybów zebrany</big></b></center> <center> <sub><big>°</big></sub><br /> ^<br /> <tt>'''SPIS TREŚCI'''</tt><br /> [[Kolędy/Kościelne|Kolędy Kościelne]]<br /> [[Kolędy/Domowe i pastorałki|Kolędy domowe i pastorałki]]<br /> [[Kolędy/Wszystkie pieśni na Boże Narodzenie|Wszystkie pieśni na Boże Narodzenie]]<br /> [[Kolędy/Nawiązania do kolęd w literaturze i sztuce|Nawiązania do kolęd w literaturze i sztuce]]<br /> [[Kolędy/Geneza kolęd|Geneza i historia kolęd i obyczajów z nimi związanych]]<br /> [[Kolędy/Scenariusze, szopki, jasełka i inne przedstawienia Bożego Narodzenia|Scenariusze, szopki, jasełka i inne przedstawienia Bożego Narodzenia]]<br /> [[Kolędy/Piosenki świeckie, zagraniczne i w obcych językach|Piosenki świeckie, zagraniczne i w obcych językach]]<br /> [[Kolędy/Informacja|Informacja]]<br /> [[Kolędy/Bibliografia|Bibliografia]]<br /> <u>_________</u> </center> [[Image:Viggo Johansen - Glade jul - 1891.jpg|thumb|500px|center|<center>Radosne Dni Bożego Narodzenia są czasem najbardziej obfitym w Chrześcijańskie tradycje.<br/>Największym wyrazem radości zdawała się być muzyka.</center>]] <div align="justify"> ;'''Kolęda''' : Zwyczaj kolędowania narodził się jeszcze w pogańskich czasach rzymskich, gdy to w pierwszych dniach roku sąsiedzi i krewni odwiedzali się wzajemnie, obdarowywali się prezentami i śpiewali pieśni '''kalendae''', chwalące początek miesiąca, domowników i otoczenie. Muzyka bowiem łączyć miała obyczaje i od zarania dziejów była wyrazem radości. Z upływem wieków pieśni te, również wśród chrześcijan, przybrały charakter religijny znany po dziś dzień. Obecnie śpiewane są w czasie Świąt Bożego Narodzenia - to jest 24 grudnia, aż do końca stycznia - święta Matki Boskiej Gromnicznej obchodzonego 2 lutego. Początkowo twórcy kolęd czerpali z Ewangelii i nazwana została '''''kolędą''''', z biegiem czasu pieśń coraz częściej sięgała do źródeł pobożności ludowej i jako bardziej świecka nazwana została '''''pastorałką'''''. Obecnym wielowiekowym zwyczajem, całe rodziny po wieczerzy wigilijnej siadały i kolędowały kontynuując tym samym niezmienioną od niemal tysięcy tradycję. Do Polski zwyczaj ten dotarł jeszcze w XV wieku, a pierwsza spisana kolęda rozpoczynała się od słów ''Zdrów bądź, Królu Anielski...'' W niecałe sto lat później ukazały się pierwsze Kantycjonały Chrześcijańskie, będące zbiorami kantyczek - religijnych pieśni kościelnych, do których zaliczono już kolędy. Do najbardziej znanych kolęd świata należy ''Cicha Noc'' tłumaczona niemal na wszystkie języki. W Polsce rozbrzmiewały przede wszystkim pieśni ''Dzisiaj w Betlejem'', ''Jezus Malusieńki'', ''Lulajże Jezuniu'', czy ''Pójdźmy wszyscy do stajenki''. Co ciekawsze, Polska liczy sobie najliczniejszy zbiór kolęd na świecie - niemal 200 kolęd i niemal 400 pastorałek, gdy w zachodnich krajach dominują jedynie pastorałki i to rzadko kiedy w liczbach przekraczających 200 utworów. Również w niektórych regionach Polski, szczególnie na wsi, spotykany jest jeszcze nawet do dziś, zwyczaj "kolędowania" - chodzenia po domach grupy kolędników - przebierańców śpiewających kolędy. Wśród nich, w zależności od regionu, spotkać można Anioła, Diabła, Turonia, Trzech Króli, Pastuszków i Muzykantów. Wiele z takich grup przygotowywało również jasełka, które w ramach "teatralnej" sztuki odgrywane były przed pełną publicznością przez młodych "aktorów". Za twórcę przedstawień bożonarodzeniowych uważany jest św. Franciszek z Asyżu, a treścią ich była, i jest nadal, historia narodzenia Jezusa w Betlejem jak i spisku Heroda. To najprawdopodobniej one właśnie, nawiązując do antycznych tradycji odwiedzin i pocieszania, dały początek wędrownym teatrzykom ludowym o świeckim charakterze. </div> ---- <div align="right"> ;Autorzy zbioru: : [[User:MonteChristof|MonteChristof]] : [[User:Nameless|Nameless]] </div> h7z8yn2mf8q0cslrxrdddjoanz8euwk Moduł:StronicowyParser/AnalizaSpisuRzeczy 828 60192 552606 552423 2026-08-20T16:15:15Z Persino 2851 552606 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,"\n[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; 4me7jechdvjb2x0pg51z45cv9eymojq 552609 552606 2026-08-20T16:27:49Z Persino 2851 552609 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_rozdzial or ((mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$")) and liczba_start_tekst or liczba_koniec_tekst); czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; pe5hlax04g1kl223heszpfc86sorc8d 552614 552609 2026-08-20T17:06:12Z Persino 2851 552614 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; 49sak6fnk9fs9ieq4zlrgmucywimjab 552636 552614 2026-08-20T19:49:50Z Persino 2851 552636 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then rozdzial=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(rozdzial); local czy_zerowy_spis_rzeczy; for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci)do czy_zerowy_spis_rzeczy=mw.ustring.match(rozdzial,p_wzor); if(czy_zerowy_spis_rzeczy)then break;end; end; if((czy_zerowy_spis_rzeczy)and(not mw.ustring.match(rozdzial,"^%s+")))then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; o20r5jagyv0le5as42w4xwg9tz6gaz9 552640 552636 2026-08-21T04:37:51Z Persino 2851 552640 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=liczba_start_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; 14chmz4azol03ru232lnymv3rjmke0z 552642 552640 2026-08-21T05:02:02Z Persino 2851 552642 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=jak and liczba_start_rozdzial or liczba_koniec_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function Parametry(spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom,liczba_start,liczba_koniec) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return Parametry(spis_naglowka_szablon_stare,spis_naglowka_szablon,nil,liczba_start_szablon,liczba_koniec_szablon); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return Parametry(spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil,liczba_start_znacznik,liczba_koniec_znacznik); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return Parametry(spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom,liczba_start_dodatni,liczba_koniec_dodatni); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; b2z0l4tec4ygc6y8s2uzqpuo9l5vgew 552651 552642 2026-08-21T06:12:09Z Persino 2851 552651 Scribunto text/plain local p={}; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=jak and liczba_start_rozdzial or liczba_koniec_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,nil); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; qge71apslhwcdowgjuxr5x5t3gptgy7 552664 552651 2026-08-21T07:13:51Z Persino 2851 552664 Scribunto text/plain local p={}; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=jak and liczba_start_rozdzial or liczba_koniec_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,nil); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; munpfo2940781aqh9vfey6wvocodkkm 552665 552664 2026-08-21T07:20:34Z Persino 2851 552665 Scribunto text/plain local p={}; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or(b<=liczba_do))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.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,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); 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,stronicowyparser_rozdzialy_modul.__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 if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=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=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.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,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=jak and liczba_start_rozdzial or liczba_koniec_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) 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) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return 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)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,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 szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) 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,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik=RozpatrywanieNapisoweWprowadzeniaTekstu(norma_kodowania_szablonu, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu(wzor_rozdzialu_dodatniego, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,nil); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,nil); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_poziom); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=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.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=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_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; 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 local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); 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")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); ---- ---- if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return liczba_linki_nierozdzialowe_szablonu,true; end; end; else return liczba_spisowa,false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return liczba_spisowa,false; end; end; else return liczba_spisowa,false; end; end; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,"",function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if(czy_element_spisu)then return linia; 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,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.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) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and(((lista_szablon~="")and((przerwa_szablon=="")or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<")))or(not mw.ustring.match(lista_szablon,"^:"))))or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))))); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(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,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_start_naglowek_przed)then if(liczba_przed_rozdzialem>=liczba_start_naglowek_przed)then liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; else liczba_start=liczba_spis_tresci; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if(liczba_start_sugerowane>liczba_start_naglowek_przed)then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if(liczba_start_nowa>liczba_start_naglowek_przed)then liczba_start=liczba_start_nowa; end; end; end; end; end; else liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; else liczba_start=liczba_start_sugerowane; end; end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,false,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; break; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; break; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then local liczba_start_od_tylu=liczba_start_sugerowane; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); liczba_start=liczba_start_nowa or liczba_start_sugerowane; end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_obiekt_start_od_tylu,liczba_start,true); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu=nil;local numer_rodzaju_artykulu=nil;local czy_podrecznik=nil; if(liczba_start<=liczba_obiekt_start)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(not czy_element_spisu)then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; --if(((not czy_spis_tresci)and(lista_szablon~=""))or((czy_spis_tresci)and((lista_szablon=="")and(przerwa_szablon==""))))then czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---elseif((lista_szablon=="")and(przerwa_szablon==""))then ---czy_element_spisu,numer_rodzaju_artykulu=p.CzyGeneralnieElementSpisuRzeczy(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,true); ---end; if(czy_element_spisu)then break;end; end; end; end; end; if(czy_element_spisu)then local function IleKoniec() while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; --else -- liczba_koniec=#tekst_rozwiniety_calego_artykulu; -- return; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; break; end; end; end; IleKoniec(); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(rozdzial,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then --koniec_obiekt=koniec_szablon; local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element=p.CzyGeneralnieElementSpisuRzeczy(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,true); if(czy_element)then liczba_koniec=liczba_rozdzial_koniec; break; end; end; start=koniec_szablon; else break; end; end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; axv2dxzoqdg2x381dkm4fkvyxaapv0c Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom III 4 63512 552641 551596 2026-08-21T04:45:57Z Persino 2851 /* {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} */ 552641 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}{{Code|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}} == Szablon do wyszukania linii, a czy w nim jest nagłówek: '''Spis treści''', czy '''Spis rzeczy''', niezależnie jakiej wielkościami liter napisany, niezaleznie jak znormowany. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - linia do sprawdzenia, * {{Code|spacje_na_poczatku}} {{Patrz|spacje_na_poczatku}} - czy na początku linii mogą być odstępy. Funkcja używa do swojego działania tabeli {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; </syntaxhighlight> * Funkcja usuwa znaki kontrolne: {{Code|<nowiki>%c</nowiki>}}, bez nowej linii: {{Code|<nowiki>\n</nowiki>}} i tabulacji: {{Code|<nowiki>\t</nowiki>}}, * W zależności od ustawień parametrów, które też trzeba włączyć do działania tego szablonu, funkcja wyszukuje odpowiedni napis wprowadzenia tekstu, ** Funkcja ustawia wartość {{Code|true}}, gdy taki nagłówek znalazł. Funkcja do usuwania odpowiednich znaków kontrolnych bez pewnych elementów, do tego celu używa funkcji: {{Code|{{sr|#p.UsuwanieZnakoweKontrolneNiewidzialne|p=Techniczne}}}}, by dalej przejść do omówionego wyszukiwania. == {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} == Funkcja w tekście wyszkukuje rozdziału ze: '''Spis treści''', czy: '''Spis rzeczy''', niezależnie jakimi wielkościami liter napisany, niezależnie jak znormowany, określone tabelą: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}. Na początku nowej linii nie mogą byc odstępy. Funkcja przeszukuje tekst: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, od pozycji: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Szablon szuka od tyłu lub do przodu, w zależności jaką wartość ma zmienna {{Code|jak}} {{LinkPatrz|jak}}, czyli w pewnych zakresach, tzn. od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. W wyszukiwaniu do przudu pierwsza liczba jest mniejsza lub równa od drugiej, a do tyłu, pierwsza liczba większa lub równa od drugiej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - przeszukiwany tekst, * {{Code|liczba_od}} {{Patrz|liczba_od}} - początek wyszukiwania, * {{Code|liczba_do}} {{Patrz|liczba_do}} - koniec wyszukiwania, * {{Code|jak}} {{Patrz|jak}} - {{Code|true}}, gdy wyszukiwanie do tyłu, a {{Code|false/nil}} do przodu. ; Sprawdzanie, linii wyszukanej, czy to jest{{dk}} {{nobold|spis treści}}, czy{{dk}} {{nobold|spis rzeczy}}{{dk}} * Funkcja wyszukuje kolejnej linie, aż do zakończenia jej zasobów, jak nie znalazł jej odpowiedniej. * Funkcja sprawdza linię przy pomocy procedury, czy wyszukana linia reprezentuje, co szukamy, według tego rozdziału, według: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}. * Jak on to znalazł odpowiednią linię pasującego do wzoru, to zwraca zestaw parametrów: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; </syntaxhighlight> Parametry zwracane dla wyszukanego rozdziału zwracanego: * {{Code|rozdzial}} - wyszukany rozdział, mający pewną w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - początek wyszukanej linii z nim, * {{Code|liczba_koniec_rozdzial}} {{Patrz|liczba_koniec_rozdzial}} - koniec wyszukanej linii z nim. W pozostałych przypadkach funkcja nie zwraca żadnej wartości. == {{Śródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}{{Code|p.CzyWprowadzenieNapisuTekstuCentrowany}} == Funkcja sprawdza, czy wyszukany szablon jest centrowany, to: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, a znacznik jest według: {{Tag|center}}, czyli też centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa)...end; </syntaxhighlight> Parametry fukcji: * {{Code|szablon}} {{Patrz|szablon}} - sprawdzany szablon, czy znacznik, * {{Code|obiekt}} {{Patrz|obiekt}} - obiekt typu: {{Code|SZABLON}}, dla szablonu, lub: {{Code|ZNACZNIK}}, dla znacznika, * {{Code|kod}} {{Patrz|kod}} - numer obiektu {{LinkPatrz|obiekt}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - taabela bazy danych zakodowanego tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica przetworzonych elementów z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, w wyniku użycia pewnych funkcji, * {{Code|pelna_nazwa_spisu_tresci_szablonowapelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - nazwa spisu w wersji szablonowej. Funkcja do sprawdzania, w tym przypadku szablonów centrowania, używa, do tego celu tabeli o kluczach o nazwach z nimi w {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Jeżeli znaleziony wskazany szablon, czy znacznik, centrowania ma zawartość, wtedy funkcja zwraca wynik: {{Code|true}}, przeciwnie nie zwraca żadnej wartości. == {{Śródtytuł|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}}{{Code|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}} == Funkcja wyszukuje teksty według wzoru {{Code|wzor}} {{LinkPatrz|wzor}} od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, od tyłu lub do przodu w zależności od ustalonej zmiennej {{Code|jak}} {{LinkPatrz|jak}}. Wybiera stąd wyszukiwania, które nie są rozdziałami dodatnimi równaniowymi i ujemnymi będących pozycjami listy. Funkcja wyklucza rozdziały będące szablonami centrowania. Funkcja sprawdza, czy wyszukany rozdział jest centrowania, robi to za pomocą zmiennej {{Code|linia}} {{LinkPatrz|linia}} i tabel baz, tzn.: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, z przetworzonymi danymi z: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. Zmienna: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, jest tylko potrzebna do przetłumaczenia na adres względny nazwy szablonu centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|wzor}} {{Patrz|wzor}} - wzór do przeszukiwania treści od: {{LinkPatrz|liczba_od}}, do: {{LinkPatrz|liczba_do}}, do tyłu, jak i do przodu, w zależności od wyboru w zmiennej {{LinkPatrz|jak}}, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do}}, * {{Code|jak}} - jak w: {{LinkPatrz|jak}}, * {{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 przeszukuje tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według wzoru {{LinkPatrz|wzor}} w pewnych zakresach: {{LinkPatrz|liczba_od}} - {{LinkPatrz|liczba_do}}, od tyłu, czy do przodu, według {{LinkPatrz|jak}}, używając do tego funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja sprawdza, aby wykluczyć je, czy wyszukany ciąg jest szablonem centrowania, robi to za pomocą funkcji: {{LinkŚródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}, a jeżeli nie, to trzeba sprawdzić, czy to jest zerowy napis wprowadzenia testu, w tym celu rewidujemy to za pomocą: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}. Jeżeli wszystko poszło dobrze do zwracane są wyniki w postaci {{Patrz|wynimi znajdowania centrowanego}}: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; </syntaxhighlight> Wyjaśnienie parametrów zwracanych: * {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}} - początek wyszukanej linii {{LinkPatrz|linia}}, * {{Code|liczba_koniec_rozdzial}} {{LinkPatrz|liczba_koniec_rozdzial}} - koniec wyszukiwanej linii {{LinkPatrz|linia}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, czyli wyszukiwana linia spełniająca pewne kryteria. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9bkq68smuk8jwdbakxk1uciu0qrr7uf 552643 552641 2026-08-21T05:12:48Z Persino 2851 /* {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} */ 552643 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}{{Code|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}} == Szablon do wyszukania linii, a czy w nim jest nagłówek: '''Spis treści''', czy '''Spis rzeczy''', niezależnie jakiej wielkościami liter napisany, niezaleznie jak znormowany. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - linia do sprawdzenia, * {{Code|spacje_na_poczatku}} {{Patrz|spacje_na_poczatku}} - czy na początku linii mogą być odstępy. Funkcja używa do swojego działania tabeli {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; </syntaxhighlight> * Funkcja usuwa znaki kontrolne: {{Code|<nowiki>%c</nowiki>}}, bez nowej linii: {{Code|<nowiki>\n</nowiki>}} i tabulacji: {{Code|<nowiki>\t</nowiki>}}, * W zależności od ustawień parametrów, które też trzeba włączyć do działania tego szablonu, funkcja wyszukuje odpowiedni napis wprowadzenia tekstu, ** Funkcja ustawia wartość {{Code|true}}, gdy taki nagłówek znalazł. Funkcja do usuwania odpowiednich znaków kontrolnych bez pewnych elementów, do tego celu używa funkcji: {{Code|{{sr|#p.UsuwanieZnakoweKontrolneNiewidzialne|p=Techniczne}}}}, by dalej przejść do omówionego wyszukiwania. == {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} == Funkcja w tekście wyszkukuje rozdziału ze: '''Spis treści''', czy: '''Spis rzeczy''', niezależnie jakimi wielkościami liter napisany, niezależnie jak znormowany, określone tabelą: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}. Na początku nowej linii nie mogą byc odstępy. Funkcja przeszukuje tekst: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, od pozycji: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Szablon szuka od tyłu lub do przodu, w zależności jaką wartość ma zmienna {{Code|jak}} {{LinkPatrz|jak}}, czyli w pewnych zakresach, tzn. od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. W wyszukiwaniu do przudu pierwsza liczba jest mniejsza lub równa od drugiej, a do tyłu, pierwsza liczba większa lub równa od drugiej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - przeszukiwany tekst, * {{Code|liczba_od}} {{Patrz|liczba_od}} - początek wyszukiwania, * {{Code|liczba_do}} {{Patrz|liczba_do}} - koniec wyszukiwania, * {{Code|jak}} {{Patrz|jak}} - {{Code|true}}, gdy wyszukiwanie do tyłu, a {{Code|false/nil}} do przodu. ; Sprawdzanie, linii wyszukanej, czy to jest{{dk}} {{nobold|spis treści}}, czy{{dk}} {{nobold|spis rzeczy}}{{dk}} * Funkcja wyszukuje kolejnej linie, aż do zakończenia jej zasobów, jak nie znalazł jej odpowiedniej, przy pomocy: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. * Funkcja sprawdza linię przy pomocy procedury, czy wyszukana linia reprezentuje, co szukamy, według tego rozdziału, według: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}. * Jak on to znalazł odpowiednią linię pasującego do wzoru, to zwraca zestaw parametrów: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; </syntaxhighlight> Parametry zwracane dla wyszukanego rozdziału zwracanego: * {{Code|rozdzial}} - wyszukany rozdział, mający pewną w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - początek wyszukanej linii z nim, * {{Code|liczba_koniec_rozdzial}} {{Patrz|liczba_koniec_rozdzial}} - koniec wyszukanej linii z nim. W pozostałych przypadkach funkcja nie zwraca żadnej wartości. == {{Śródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}{{Code|p.CzyWprowadzenieNapisuTekstuCentrowany}} == Funkcja sprawdza, czy wyszukany szablon jest centrowany, to: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, a znacznik jest według: {{Tag|center}}, czyli też centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa)...end; </syntaxhighlight> Parametry fukcji: * {{Code|szablon}} {{Patrz|szablon}} - sprawdzany szablon, czy znacznik, * {{Code|obiekt}} {{Patrz|obiekt}} - obiekt typu: {{Code|SZABLON}}, dla szablonu, lub: {{Code|ZNACZNIK}}, dla znacznika, * {{Code|kod}} {{Patrz|kod}} - numer obiektu {{LinkPatrz|obiekt}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - taabela bazy danych zakodowanego tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica przetworzonych elementów z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, w wyniku użycia pewnych funkcji, * {{Code|pelna_nazwa_spisu_tresci_szablonowapelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - nazwa spisu w wersji szablonowej. Funkcja do sprawdzania, w tym przypadku szablonów centrowania, używa, do tego celu tabeli o kluczach o nazwach z nimi w {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Jeżeli znaleziony wskazany szablon, czy znacznik, centrowania ma zawartość, wtedy funkcja zwraca wynik: {{Code|true}}, przeciwnie nie zwraca żadnej wartości. == {{Śródtytuł|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}}{{Code|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}} == Funkcja wyszukuje teksty według wzoru {{Code|wzor}} {{LinkPatrz|wzor}} od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, od tyłu lub do przodu w zależności od ustalonej zmiennej {{Code|jak}} {{LinkPatrz|jak}}. Wybiera stąd wyszukiwania, które nie są rozdziałami dodatnimi równaniowymi i ujemnymi będących pozycjami listy. Funkcja wyklucza rozdziały będące szablonami centrowania. Funkcja sprawdza, czy wyszukany rozdział jest centrowania, robi to za pomocą zmiennej {{Code|linia}} {{LinkPatrz|linia}} i tabel baz, tzn.: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, z przetworzonymi danymi z: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. Zmienna: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, jest tylko potrzebna do przetłumaczenia na adres względny nazwy szablonu centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|wzor}} {{Patrz|wzor}} - wzór do przeszukiwania treści od: {{LinkPatrz|liczba_od}}, do: {{LinkPatrz|liczba_do}}, do tyłu, jak i do przodu, w zależności od wyboru w zmiennej {{LinkPatrz|jak}}, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do}}, * {{Code|jak}} - jak w: {{LinkPatrz|jak}}, * {{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 przeszukuje tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według wzoru {{LinkPatrz|wzor}} w pewnych zakresach: {{LinkPatrz|liczba_od}} - {{LinkPatrz|liczba_do}}, od tyłu, czy do przodu, według {{LinkPatrz|jak}}, używając do tego funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja sprawdza, aby wykluczyć je, czy wyszukany ciąg jest szablonem centrowania, robi to za pomocą funkcji: {{LinkŚródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}, a jeżeli nie, to trzeba sprawdzić, czy to jest zerowy napis wprowadzenia testu, w tym celu rewidujemy to za pomocą: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}. Jeżeli wszystko poszło dobrze do zwracane są wyniki w postaci {{Patrz|wynimi znajdowania centrowanego}}: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; </syntaxhighlight> Wyjaśnienie parametrów zwracanych: * {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}} - początek wyszukanej linii {{LinkPatrz|linia}}, * {{Code|liczba_koniec_rozdzial}} {{LinkPatrz|liczba_koniec_rozdzial}} - koniec wyszukiwanej linii {{LinkPatrz|linia}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, czyli wyszukiwana linia spełniająca pewne kryteria. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fph6bsbqp5tq0hakam5qv8ha2m1hsa1 552653 552643 2026-08-21T06:15:02Z Persino 2851 Persino przeniósł(-osła) stronę [[Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom I]] do [[Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom III]], bez pozostawienia przekierowania pod starym tytułem 552643 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}{{Code|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}} == Szablon do wyszukania linii, a czy w nim jest nagłówek: '''Spis treści''', czy '''Spis rzeczy''', niezależnie jakiej wielkościami liter napisany, niezaleznie jak znormowany. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - linia do sprawdzenia, * {{Code|spacje_na_poczatku}} {{Patrz|spacje_na_poczatku}} - czy na początku linii mogą być odstępy. Funkcja używa do swojego działania tabeli {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; </syntaxhighlight> * Funkcja usuwa znaki kontrolne: {{Code|<nowiki>%c</nowiki>}}, bez nowej linii: {{Code|<nowiki>\n</nowiki>}} i tabulacji: {{Code|<nowiki>\t</nowiki>}}, * W zależności od ustawień parametrów, które też trzeba włączyć do działania tego szablonu, funkcja wyszukuje odpowiedni napis wprowadzenia tekstu, ** Funkcja ustawia wartość {{Code|true}}, gdy taki nagłówek znalazł. Funkcja do usuwania odpowiednich znaków kontrolnych bez pewnych elementów, do tego celu używa funkcji: {{Code|{{sr|#p.UsuwanieZnakoweKontrolneNiewidzialne|p=Techniczne}}}}, by dalej przejść do omówionego wyszukiwania. == {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} == Funkcja w tekście wyszkukuje rozdziału ze: '''Spis treści''', czy: '''Spis rzeczy''', niezależnie jakimi wielkościami liter napisany, niezależnie jak znormowany, określone tabelą: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}. Na początku nowej linii nie mogą byc odstępy. Funkcja przeszukuje tekst: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, od pozycji: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Szablon szuka od tyłu lub do przodu, w zależności jaką wartość ma zmienna {{Code|jak}} {{LinkPatrz|jak}}, czyli w pewnych zakresach, tzn. od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. W wyszukiwaniu do przudu pierwsza liczba jest mniejsza lub równa od drugiej, a do tyłu, pierwsza liczba większa lub równa od drugiej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - przeszukiwany tekst, * {{Code|liczba_od}} {{Patrz|liczba_od}} - początek wyszukiwania, * {{Code|liczba_do}} {{Patrz|liczba_do}} - koniec wyszukiwania, * {{Code|jak}} {{Patrz|jak}} - {{Code|true}}, gdy wyszukiwanie do tyłu, a {{Code|false/nil}} do przodu. ; Sprawdzanie, linii wyszukanej, czy to jest{{dk}} {{nobold|spis treści}}, czy{{dk}} {{nobold|spis rzeczy}}{{dk}} * Funkcja wyszukuje kolejnej linie, aż do zakończenia jej zasobów, jak nie znalazł jej odpowiedniej, przy pomocy: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. * Funkcja sprawdza linię przy pomocy procedury, czy wyszukana linia reprezentuje, co szukamy, według tego rozdziału, według: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}. * Jak on to znalazł odpowiednią linię pasującego do wzoru, to zwraca zestaw parametrów: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; </syntaxhighlight> Parametry zwracane dla wyszukanego rozdziału zwracanego: * {{Code|rozdzial}} - wyszukany rozdział, mający pewną w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - początek wyszukanej linii z nim, * {{Code|liczba_koniec_rozdzial}} {{Patrz|liczba_koniec_rozdzial}} - koniec wyszukanej linii z nim. W pozostałych przypadkach funkcja nie zwraca żadnej wartości. == {{Śródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}{{Code|p.CzyWprowadzenieNapisuTekstuCentrowany}} == Funkcja sprawdza, czy wyszukany szablon jest centrowany, to: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, a znacznik jest według: {{Tag|center}}, czyli też centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa)...end; </syntaxhighlight> Parametry fukcji: * {{Code|szablon}} {{Patrz|szablon}} - sprawdzany szablon, czy znacznik, * {{Code|obiekt}} {{Patrz|obiekt}} - obiekt typu: {{Code|SZABLON}}, dla szablonu, lub: {{Code|ZNACZNIK}}, dla znacznika, * {{Code|kod}} {{Patrz|kod}} - numer obiektu {{LinkPatrz|obiekt}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - taabela bazy danych zakodowanego tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica przetworzonych elementów z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, w wyniku użycia pewnych funkcji, * {{Code|pelna_nazwa_spisu_tresci_szablonowapelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - nazwa spisu w wersji szablonowej. Funkcja do sprawdzania, w tym przypadku szablonów centrowania, używa, do tego celu tabeli o kluczach o nazwach z nimi w {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Jeżeli znaleziony wskazany szablon, czy znacznik, centrowania ma zawartość, wtedy funkcja zwraca wynik: {{Code|true}}, przeciwnie nie zwraca żadnej wartości. == {{Śródtytuł|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}}{{Code|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}} == Funkcja wyszukuje teksty według wzoru {{Code|wzor}} {{LinkPatrz|wzor}} od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, od tyłu lub do przodu w zależności od ustalonej zmiennej {{Code|jak}} {{LinkPatrz|jak}}. Wybiera stąd wyszukiwania, które nie są rozdziałami dodatnimi równaniowymi i ujemnymi będących pozycjami listy. Funkcja wyklucza rozdziały będące szablonami centrowania. Funkcja sprawdza, czy wyszukany rozdział jest centrowania, robi to za pomocą zmiennej {{Code|linia}} {{LinkPatrz|linia}} i tabel baz, tzn.: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, z przetworzonymi danymi z: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. Zmienna: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, jest tylko potrzebna do przetłumaczenia na adres względny nazwy szablonu centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|wzor}} {{Patrz|wzor}} - wzór do przeszukiwania treści od: {{LinkPatrz|liczba_od}}, do: {{LinkPatrz|liczba_do}}, do tyłu, jak i do przodu, w zależności od wyboru w zmiennej {{LinkPatrz|jak}}, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do}}, * {{Code|jak}} - jak w: {{LinkPatrz|jak}}, * {{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 przeszukuje tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według wzoru {{LinkPatrz|wzor}} w pewnych zakresach: {{LinkPatrz|liczba_od}} - {{LinkPatrz|liczba_do}}, od tyłu, czy do przodu, według {{LinkPatrz|jak}}, używając do tego funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja sprawdza, aby wykluczyć je, czy wyszukany ciąg jest szablonem centrowania, robi to za pomocą funkcji: {{LinkŚródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}, a jeżeli nie, to trzeba sprawdzić, czy to jest zerowy napis wprowadzenia testu, w tym celu rewidujemy to za pomocą: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}. Jeżeli wszystko poszło dobrze do zwracane są wyniki w postaci {{Patrz|wynimi znajdowania centrowanego}}: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; </syntaxhighlight> Wyjaśnienie parametrów zwracanych: * {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}} - początek wyszukanej linii {{LinkPatrz|linia}}, * {{Code|liczba_koniec_rozdzial}} {{LinkPatrz|liczba_koniec_rozdzial}} - koniec wyszukiwanej linii {{LinkPatrz|linia}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, czyli wyszukiwana linia spełniająca pewne kryteria. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fph6bsbqp5tq0hakam5qv8ha2m1hsa1 552656 552653 2026-08-21T06:19:00Z Persino 2851 552656 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}{{Code|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}} == Szablon do wyszukania linii, a czy w nim jest nagłówek: '''Spis treści''', czy '''Spis rzeczy''', niezależnie jakiej wielkościami liter napisany, niezaleznie jak znormowany. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - linia do sprawdzenia, * {{Code|spacje_na_poczatku}} {{Patrz|spacje_na_poczatku}} - czy na początku linii mogą być odstępy. Funkcja używa do swojego działania tabeli {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; </syntaxhighlight> * Funkcja usuwa znaki kontrolne: {{Code|<nowiki>%c</nowiki>}}, bez nowej linii: {{Code|<nowiki>\n</nowiki>}} i tabulacji: {{Code|<nowiki>\t</nowiki>}}, * W zależności od ustawień parametrów, które też trzeba włączyć do działania tego szablonu, funkcja wyszukuje odpowiedni napis wprowadzenia tekstu, ** Funkcja ustawia wartość {{Code|true}}, gdy taki nagłówek znalazł. Funkcja do usuwania odpowiednich znaków kontrolnych bez pewnych elementów, do tego celu używa funkcji: {{Code|{{sr|#p.UsuwanieZnakoweKontrolneNiewidzialne|p=Techniczne}}}}, by dalej przejść do omówionego wyszukiwania. == {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} == Funkcja w tekście wyszkukuje rozdziału ze: '''Spis treści''', czy: '''Spis rzeczy''', niezależnie jakimi wielkościami liter napisany, niezależnie jak znormowany, określone tabelą: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}. Na początku nowej linii nie mogą byc odstępy. Funkcja przeszukuje tekst: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, od pozycji: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Szablon szuka od tyłu lub do przodu, w zależności jaką wartość ma zmienna {{Code|jak}} {{LinkPatrz|jak}}, czyli w pewnych zakresach, tzn. od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. W wyszukiwaniu do przudu pierwsza liczba jest mniejsza lub równa od drugiej, a do tyłu, pierwsza liczba większa lub równa od drugiej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - przeszukiwany tekst, * {{Code|liczba_od}} {{Patrz|liczba_od}} - początek wyszukiwania, * {{Code|liczba_do}} {{Patrz|liczba_do}} - koniec wyszukiwania, * {{Code|jak}} {{Patrz|jak}} - {{Code|true}}, gdy wyszukiwanie do tyłu, a {{Code|false/nil}} do przodu. ; Sprawdzanie, linii wyszukanej, czy to jest{{dk}} {{nobold|spis treści}}, czy{{dk}} {{nobold|spis rzeczy}}{{dk}} * Funkcja wyszukuje kolejnej linie, aż do zakończenia jej zasobów, jak nie znalazł jej odpowiedniej, przy pomocy: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. * Funkcja sprawdza linię przy pomocy procedury, czy wyszukana linia reprezentuje, co szukamy, według tego rozdziału, według: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}. * Jak on to znalazł odpowiednią linię pasującego do wzoru, to zwraca zestaw parametrów: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; </syntaxhighlight> Parametry zwracane dla wyszukanego rozdziału zwracanego: * {{Code|rozdzial}} - wyszukany rozdział, mający pewną w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - początek wyszukanej linii z nim, * {{Code|liczba_koniec_rozdzial}} {{Patrz|liczba_koniec_rozdzial}} - koniec wyszukanej linii z nim. W pozostałych przypadkach funkcja nie zwraca żadnej wartości. == {{Śródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}{{Code|p.CzyWprowadzenieNapisuTekstuCentrowany}} == Funkcja sprawdza, czy wyszukany szablon jest centrowany, to: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, a znacznik jest według: {{Tag|center}}, czyli też centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa)...end; </syntaxhighlight> Parametry fukcji: * {{Code|szablon}} {{Patrz|szablon}} - sprawdzany szablon, czy znacznik, * {{Code|obiekt}} {{Patrz|obiekt}} - obiekt typu: {{Code|SZABLON}}, dla szablonu, lub: {{Code|ZNACZNIK}}, dla znacznika, * {{Code|kod}} {{Patrz|kod}} - numer obiektu {{LinkPatrz|obiekt}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - taabela bazy danych zakodowanego tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica przetworzonych elementów z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, w wyniku użycia pewnych funkcji, * {{Code|pelna_nazwa_spisu_tresci_szablonowapelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - nazwa spisu w wersji szablonowej. Funkcja do sprawdzania, w tym przypadku szablonów centrowania, używa, do tego celu tabeli o kluczach o nazwach z nimi w {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Jeżeli znaleziony wskazany szablon, czy znacznik, centrowania ma zawartość, wtedy funkcja zwraca wynik: {{Code|true}}, przeciwnie nie zwraca żadnej wartości. == {{Śródtytuł|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}}{{Code|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}} == Funkcja wyszukuje teksty według wzoru {{Code|wzor}} {{LinkPatrz|wzor}} od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, od tyłu lub do przodu w zależności od ustalonej zmiennej {{Code|jak}} {{LinkPatrz|jak}}. Wybiera stąd wyszukiwania, które nie są rozdziałami dodatnimi równaniowymi i ujemnymi będących pozycjami listy. Funkcja wyklucza rozdziały będące szablonami centrowania. Funkcja sprawdza, czy wyszukany rozdział jest centrowania, robi to za pomocą zmiennej {{Code|linia}} {{LinkPatrz|linia}} i tabel baz, tzn.: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, z przetworzonymi danymi z: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. Zmienna: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}, jest tylko potrzebna do przetłumaczenia na adres względny nazwy szablonu centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|wzor}} {{Patrz|wzor}} - wzór do przeszukiwania treści od: {{LinkPatrz|liczba_od}}, do: {{LinkPatrz|liczba_do}}, do tyłu, jak i do przodu, w zależności od wyboru w zmiennej {{LinkPatrz|jak}}, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do}}, * {{Code|jak}} - jak w: {{LinkPatrz|jak}}, * {{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 przeszukuje tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według wzoru {{LinkPatrz|wzor}} w pewnych zakresach: {{LinkPatrz|liczba_od}} - {{LinkPatrz|liczba_do}}, od tyłu, czy do przodu, według {{LinkPatrz|jak}}, używając do tego funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja sprawdza, aby wykluczyć je, czy wyszukany ciąg jest szablonem centrowania, robi to za pomocą funkcji: {{LinkŚródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}, a jeżeli nie, to trzeba sprawdzić, czy to jest zerowy napis wprowadzenia testu, w tym celu rewidujemy to za pomocą: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}. Jeżeli wszystko poszło dobrze do zwracane są wyniki w postaci {{Patrz|wynimi znajdowania centrowanego}}: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; </syntaxhighlight> Wyjaśnienie parametrów zwracanych: * {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}} - początek wyszukanej linii {{LinkPatrz|linia}}, * {{Code|liczba_koniec_rozdzial}} {{LinkPatrz|liczba_koniec_rozdzial}} - koniec wyszukiwanej linii {{LinkPatrz|linia}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, czyli wyszukiwana linia spełniająca pewne kryteria. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 136kocw693r95yzasaksw9g9isn1c5m 552662 552656 2026-08-21T06:59:48Z Persino 2851 552662 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}{{Code|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}} == Szablon do wyszukania linii, a czy w nim jest nagłówek: '''Spis treści''', czy '''Spis rzeczy''', niezależnie jakiej wielkościami liter napisany, niezaleznie jak znormowany. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} - linia do sprawdzenia, * {{Code|spacje_na_poczatku}} {{Patrz|spacje_na_poczatku}} - czy na początku linii mogą być odstępy. Funkcja używa do swojego działania tabeli {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; </syntaxhighlight> * Funkcja usuwa znaki kontrolne: {{Code|<nowiki>%c</nowiki>}}, bez nowej linii: {{Code|<nowiki>\n</nowiki>}} i tabulacji: {{Code|<nowiki>\t</nowiki>}}, * W zależności od ustawień parametrów, które też trzeba włączyć do działania tego szablonu, funkcja wyszukuje odpowiedni napis wprowadzenia tekstu, ** Funkcja ustawia wartość {{Code|true}}, gdy taki nagłówek znalazł. Funkcja do usuwania odpowiednich znaków kontrolnych bez pewnych elementów, do tego celu używa funkcji: {{Code|{{sr|#p.UsuwanieZnakoweKontrolneNiewidzialne|p=Techniczne}}}}, by dalej przejść do omówionego wyszukiwania. == {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} == Funkcja w tekście wyszkukuje rozdziału ze: '''Spis treści''', czy: '''Spis rzeczy''', niezależnie jakimi wielkościami liter napisany, niezależnie jak znormowany, określone tabelą: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}. Na początku nowej linii nie mogą byc odstępy. Funkcja przeszukuje tekst: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, od pozycji: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Szablon szuka od tyłu lub do przodu, w zależności jaką wartość ma zmienna {{Code|jak}} {{LinkPatrz|jak}}, czyli w pewnych zakresach, tzn. od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. W wyszukiwaniu do przudu pierwsza liczba jest mniejsza lub równa od drugiej, a do tyłu, pierwsza liczba większa lub równa od drugiej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - przeszukiwany tekst, * {{Code|liczba_od}} {{Patrz|liczba_od}} - początek wyszukiwania, * {{Code|liczba_do}} {{Patrz|liczba_do}} - koniec wyszukiwania, * {{Code|jak}} {{Patrz|jak}} - {{Code|true}}, gdy wyszukiwanie do tyłu, a {{Code|false/nil}} do przodu. ; Sprawdzanie, linii wyszukanej, czy to jest{{dk}} {{nobold|spis treści}}, czy{{dk}} {{nobold|spis rzeczy}}{{dk}} * Funkcja wyszukuje kolejnej linie, aż do zakończenia jej zasobów, jak nie znalazł jej odpowiedniej, przy pomocy: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. * Funkcja sprawdza linię przy pomocy procedury, czy wyszukana linia reprezentuje, co szukamy, według tego rozdziału, według: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}. * Jak on to znalazł odpowiednią linię pasującego do wzoru, to zwraca zestaw parametrów: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; </syntaxhighlight> Parametry zwracane dla wyszukanego rozdziału zwracanego: * {{Code|rozdzial}} - wyszukany rozdział, mający pewną w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - początek wyszukanej linii z nim, * {{Code|liczba_koniec_rozdzial}} {{Patrz|liczba_koniec_rozdzial}} - koniec wyszukanej linii z nim. W pozostałych przypadkach funkcja nie zwraca żadnej wartości. == {{Śródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}{{Code|p.CzyWprowadzenieNapisuTekstuCentrowany}} == Funkcja sprawdza, czy wyszukany szablon jest centrowany, to: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, a znacznik jest według: {{Tag|center}}, czyli też centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa)...end; </syntaxhighlight> Parametry fukcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, w naszej funkcji, sprawdzany element, to szablon, czy znacznik, * {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} - obiekt typu: {{Code|SZABLON}}, dla szablonu, lub: {{Code|ZNACZNIK}}, dla znacznika, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Funkcja do sprawdzania, w tym przypadku szablonów centrowania, używa, do tego celu tabeli o kluczach o nazwach z nimi w {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Jeżeli znaleziony wskazany szablon, czy znacznik, centrowania ma zawartość, wtedy funkcja zwraca wynik: {{Code|true}}, przeciwnie nie zwraca żadnej wartości. == {{Śródtytuł|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}}{{Code|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}} == Funkcja wyszukuje teksty według wzoru {{Code|wzor}} {{LinkPatrz|wzor}} od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, od tyłu lub do przodu w zależności od ustalonej zmiennej {{Code|jak}} {{LinkPatrz|jak}}. Wybiera stąd wyszukiwania, które nie są rozdziałami dodatnimi równaniowymi i ujemnymi będących pozycjami listy. Funkcja wyklucza rozdziały będące szablonami centrowania. Funkcja sprawdza, czy wyszukany rozdział jest centrowania, robi to za pomocą zmiennej {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i tabel baz, tzn.: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, z przetworzonymi danymi z: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Zmienna: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jest tylko potrzebna do przetłumaczenia na adres względny nazwy szablonu centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|wzor}} {{Patrz|wzor}} - wzór do przeszukiwania treści od: {{LinkPatrz|liczba_od}}, do: {{LinkPatrz|liczba_do}}, do tyłu, jak i do przodu, w zależności od wyboru w zmiennej {{LinkPatrz|jak}}, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do}}, * {{Code|jak}} - jak w: {{LinkPatrz|jak}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Funkcja przeszukuje tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według wzoru {{LinkPatrz|wzor}} w pewnych zakresach: {{LinkPatrz|liczba_od}} - {{LinkPatrz|liczba_do}}, od tyłu, czy do przodu, według {{LinkPatrz|jak}}, używając do tego funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja sprawdza, aby wykluczyć je, czy wyszukany ciąg jest szablonem centrowania, robi to za pomocą funkcji: {{LinkŚródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}, a jeżeli nie, to trzeba sprawdzić, czy to jest zerowy napis wprowadzenia testu, w tym celu rewidujemy to za pomocą: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}. Jeżeli wszystko poszło dobrze do zwracane są wyniki w postaci {{Patrz|wynimi znajdowania centrowanego}}: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; </syntaxhighlight> Wyjaśnienie parametrów zwracanych: * {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}} - początek wyszukanej linii {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_koniec_rozdzial}} {{LinkPatrz|liczba_koniec_rozdzial}} - koniec wyszukiwanej linii {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czyli wyszukiwana linia spełniająca pewne kryteria. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mv5azmoqn35vs4urbh6dbl0xxi1txg0 552673 552662 2026-08-21T09:17:43Z Persino 2851 552673 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}{{Code|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}} == Szablon do wyszukania linii, a czy w nim jest nagłówek: '''Spis treści''', czy '''Spis rzeczy''', niezależnie jakiej wielkościami liter napisany, niezaleznie jak znormowany. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} - linia do sprawdzenia, * {{Code|spacje_na_poczatku}} {{Patrz|spacje_na_poczatku}} - czy na początku linii mogą być odstępy. Funkcja używa do swojego działania tabeli {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci={ [1]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Tt][Rr][Ee][ŚśSs][Cc][Ii][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", [2]="[ _\t]*'*[ _\t]*[Ss][Pp][Ii][Ss][ _\t]+[Rr][Zz][Ee][Cc][Zz][Yy][ _\t]*'*[ _\t]*:?[ _\t]*'*[ _\t]*", }; </syntaxhighlight> * Funkcja usuwa znaki kontrolne: {{Code|<nowiki>%c</nowiki>}}, bez nowej linii: {{Code|<nowiki>\n</nowiki>}} i tabulacji: {{Code|<nowiki>\t</nowiki>}}, * W zależności od ustawień parametrów, które też trzeba włączyć do działania tego szablonu, funkcja wyszukuje odpowiedni napis wprowadzenia tekstu, ** Funkcja ustawia wartość {{Code|true}}, gdy taki nagłówek znalazł. Funkcja do usuwania odpowiednich znaków kontrolnych bez pewnych elementów, do tego celu używa funkcji: {{Code|{{sr|#p.UsuwanieZnakoweKontrolneNiewidzialne|p=Techniczne}}}}, by dalej przejść do omówionego wyszukiwania. == {{Śródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy}}{{Code|p.ZnajdowanieZerowegoSpisuRzeczy}} == Funkcja w tekście wyszkukuje rozdziału ze: '''Spis treści''', czy: '''Spis rzeczy''', niezależnie jakimi wielkościami liter napisany, niezależnie jak znormowany, określone tabelą: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci}}. Na początku nowej linii nie mogą być odstępy. Funkcja przeszukuje tekst: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, od pozycji: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Szablon szuka od tyłu lub do przodu, w zależności, jaką wartość ma zmienna {{Code|jak}} {{LinkPatrz|jak}}, czyli w pewnych zakresach, tzn. od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. W wyszukiwaniu do przudu pierwsza liczba jest mniejsza lub równa od drugiej, a do tyłu, pierwsza liczba większa lub równa od drugiej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - przeszukiwany tekst, * {{Code|liczba_od}} {{Patrz|liczba_od}} - początek wyszukiwania, * {{Code|liczba_do}} {{Patrz|liczba_do}} - koniec wyszukiwania, * {{Code|jak}} {{Patrz|jak}} - {{Code|true}}, gdy wyszukiwanie do tyłu, a {{Code|false/nil}} do przodu. ; Sprawdzanie, linii wyszukanej, czy to jest{{dk}} {{nobold|spis treści}}, czy{{dk}} {{nobold|spis rzeczy}}{{dk}} * Funkcja wyszukuje kolejnej linie, aż do zakończenia jej zasobów, jak nie znalazł jej odpowiedniej, przy pomocy: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. * Funkcja sprawdza linię przy pomocy procedury, czy wyszukana linia reprezentuje, co szukamy, według tego rozdziału, według: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron}}. * Jak on to znalazł odpowiednią linię pasującego do wzoru, to zwraca zestaw parametrów: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; </syntaxhighlight> Parametry zwracane dla wyszukanego rozdziału zwracanego: * {{Code|rozdzial}} - wyszukany rozdział, mający pewną w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - początek wyszukanej linii z nim, * {{Code|liczba_koniec_rozdzial}} {{Patrz|liczba_koniec_rozdzial}} - koniec wyszukanej linii z nim. W pozostałych przypadkach funkcja nie zwraca żadnej wartości. == {{Śródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}{{Code|p.CzyWprowadzenieNapisuTekstuCentrowany}} == Funkcja sprawdza, czy wyszukany szablon jest centrowany, to: {{s|Center}}, {{s|Centruj}} lub {{s|Ce}}, a znacznik jest według: {{Tag|center}}, czyli też centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,pelna_nazwa_spisu_tresci_szablonowa)...end; </syntaxhighlight> Parametry fukcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, w naszej funkcji, sprawdzany element, to szablon, czy znacznik, * {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} - obiekt typu: {{Code|SZABLON}}, dla szablonu, lub: {{Code|ZNACZNIK}}, dla znacznika, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Funkcja do sprawdzania, w tym przypadku, szablonów centrowania, używa, do tego celu tabeli o kluczach o nazwach z nimi w {{Patrz|p.szablony_wprowadzenia_napisu_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.szablony_wprowadzenia_napisu_spisu_rzeczy={ ["Ce"]=1, ["Centruj"]=1, ["Center"]=1, }; </syntaxhighlight> Jeżeli znaleziony wskazany szablon, czy znacznik, centrowania ma zawartość, wtedy funkcja zwraca wynik: {{Code|true}}, przeciwnie nie zwraca żadnej wartości. == {{Śródtytuł|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}}{{Code|p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu}} == Funkcja wyszukuje teksty według wzoru {{Code|wzor}} {{LinkPatrz|wzor}} od {{Code|liczba_od}} {{LinkPatrz|liczba_od}} do {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, od tyłu lub do przodu w zależności od ustalonej zmiennej {{Code|jak}} {{LinkPatrz|jak}}. Wybiera stąd wyszukiwania, które nie są rozdziałami dodatnimi równaniowymi i ujemnymi będących pozycjami listy. Funkcja wyklucza rozdziały będące szablonami centrowania. Funkcja sprawdza, czy wyszukany rozdział jest centrowania, robi to za pomocą zmiennej {{Code|linia}} {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i tabel baz, tzn.: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, z przetworzonymi danymi z: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, z tego wyszukuje zmienne z iteratora z jego pierwszego wywołania iteracyjnego, i z tylko jednego, bez iterowania w pętli, jeśli są: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Zmienna: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jest tylko potrzebna do przetłumaczenia na adres względny nazwy szablonu centrowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, * {{Code|wzor}} {{Patrz|wzor}} - wzór do przeszukiwania treści od: {{LinkPatrz|liczba_od}}, do: {{LinkPatrz|liczba_do}}, do tyłu, jak i do przodu, w zależności od wyboru w zmiennej {{LinkPatrz|jak}}, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do}}, * {{Code|jak}} - jak w: {{LinkPatrz|jak}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Funkcja przeszukuje tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}} według wzoru {{LinkPatrz|wzor}} w pewnych zakresach: {{LinkPatrz|liczba_od}} - {{LinkPatrz|liczba_do}}, od tyłu, czy do przodu, według {{LinkPatrz|jak}}, używając do tego funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja sprawdza, aby wykluczyć je, czy wyszukany ciąg jest szablonem centrowania, robi to za pomocą funkcji: {{LinkŚródtytuł|p.CzyWprowadzenieNapisuTekstuCentrowany}}, a jeżeli nie, to trzeba sprawdzić, czy to jest zerowy napis wprowadzenia testu, w tym celu rewidujemy to za pomocą: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}. Jeżeli wszystko poszło dobrze do zwracane są wyniki w postaci {{Patrz|wynimi znajdowania centrowanego}}: <syntaxhighlight lang="lua"> return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; </syntaxhighlight> Wyjaśnienie parametrów zwracanych: * {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}} - początek wyszukanej linii {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_koniec_rozdzial}} {{LinkPatrz|liczba_koniec_rozdzial}} - koniec wyszukiwanej linii {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czyli wyszukiwana linia spełniająca pewne kryteria. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> k51et4qadbauht53j2zj2xrbfpfh9tw Wikipedysta:Persino/brudnopis12 2 63880 552613 551869 2026-08-20T17:05:36Z Persino 2851 552613 wikitext text/x-wiki tytan: * [[/tytan/]] # [[/tytan/]] : [[/tytan/]] {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} sg44bg15ksghkww5evv4jyyfhxn44k6 552615 552613 2026-08-20T17:07:19Z Persino 2851 552615 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/tytan/]] * [[/tytan/]] {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} alolflzop7yjk4ql9z9v7o9xemkcqzp 552616 552615 2026-08-20T17:09:08Z Persino 2851 552616 wikitext text/x-wiki Spis treści: * [[/tytan/]] * [[/tytan/]] * [[/tytan/]] {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} r24jmiu9bu1tccaob3cr1jkp3rxljps 552617 552616 2026-08-20T17:11:13Z Persino 2851 552617 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/tytan/]] * [[/tytan/]] {{PobierzNumerArtykułu|tytan|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} nh6ocgwrihpgjjhvarfs08yat5f0pww 552618 552617 2026-08-20T17:14:39Z Persino 2851 552618 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/tytan/]] * [[/tytan/]] ==tytan== * [[/tytan/]] {{PobierzNumerArtykułu|tytan|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} 2m4nll9hnftt18562ys6zhdg3yk22hv 552619 552618 2026-08-20T17:22:22Z Persino 2851 552619 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/tytan/]] * [[/tytan/]] ==tytan== * [[/tytan/]] {{PobierzNumerArtykułu|tytan|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} <!-- {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} --> chrgnzfnxp646zzg079capt8gr032wu 552620 552619 2026-08-20T17:31:41Z Persino 2851 552620 wikitext text/x-wiki tytan: * [[/Tytan tytan 1/]] * [[/Tytan tytan 2/]] * [[/Tytan tytan 3/]] ==tytan== * [[/Tytan tytan 4/]] {{PobierzNumerArtykułu|tytan|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} <!-- {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} --> rb7elq7jt2u35821gcythdkvlyliydo 552621 552620 2026-08-20T17:36:54Z Persino 2851 552621 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/Tytan tytan 1/]] * [[/Tytan tytan 2/]] * [[/Tytan tytan 3/]] ==tytan== * [[/Tytan tytan 4/]] {{PobierzNumerArtykułu|tytan|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} <!-- {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} --> b7esyk7z78umn5sk2fgxp5wuk5l9xgv 552622 552621 2026-08-20T17:37:59Z Persino 2851 552622 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/Tytan tytan 1/]] * [[/Tytan tytan 2/]] * [[/Tytan tytan 3/]] ==tytan== * [[/Tytan tytan 4/]] {{PobierzNumerArtykułu|tytan|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} qagq0ihgjlqzytscu2gwdiukyugov5i 552623 552622 2026-08-20T17:38:38Z Persino 2851 552623 wikitext text/x-wiki tytan: * [[/tytan/]] * [[/Tytan tytan 1/]] * [[/Tytan tytan 2/]] * [[/Tytan tytan 3/]] ==tytan== * [[/Tytan tytan 4/]] {{PobierzNumerArtykułu|tytan|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=User|nazwa jednostki=Persino/brudnopis12}} {{PobierzNumerArtykułu|Podział|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Działy onomastyki|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|3.1|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant I|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|1|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Wariant II|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} {{PobierzNazwęArtykułu|2|dane=3|który=4|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} ---- {{PobierzNumerArtykułu|Spis treści|dane=3|który=3|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=Wikijunior|nazwa jednostki=Polska/Spis treści}} ---- {{#invoke:StronicowyParser|PobierzDaneKsiążki|Wariant II|wyspecjalizowana=tak|dane=3|który=1|poziomowo=tak|nagłówek=tak|bez automatu=|nazwa przestrzeni nazw=(main)|nazwa jednostki=Onomastyka/Podział}} aejbvklluo0mxc7e9euwy4xjawuvz3z Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom II 4 63917 552655 551660 2026-08-21T06:17:47Z Persino 2851 552655 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.CzyElementSpisuRzeczy}}{{Code|p.CzyElementSpisuRzeczy}} == Funkcja sprawdza, czy wywołanie szablonowe, obiekty typu {{Code|SZABLON}}, linkuje do artykułu w książce, lub obiekt {{Code|LINKW}}, też musi być artykułem (podstroną) tego podręcznika. Funkcja sprawdza, czy ten artykuł nie jest artykułem okładką, czy innym niedozwolonym artykułem, to zależy od tego od definicji, to jest robione i sprawdzane tablicą {{Patrz|p.artykularne_niespisowe}}, którego określenie: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Funkcja traktuje stronę za podręcznik, jeżeli jest spełnione {{Patrz|czy_podrecznik}}: <syntaxhighlight lang="lua"> local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))); </syntaxhighlight> Artykuł książki powinien zaczynać się od dużej litery oraz nie powinien mieć po małej literze dużą lub w sobie powinien mieć dowolne dozwolone, przez mechanizm '''MediaWiki''', znaki odstępu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.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,czy_usun_okladka,czy_glowny_spis_tresci) </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry funkcji spisu artykularnego}}: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno jest to: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''', i '''nazwa książki''', * {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści w podręcznikiem, jego wartością możeb być wartość pusta, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tablica nazw spisu przekierowaniowego, używanego przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.AnalizujLinkSzablonyOrazLinki}}, * {{Code|czy_usun_okladka}} {{Patrz|czy_usun_okladka}} - uważaj artykuł wszystkie, nawet okładki i inne tego typu, jako spisowe, traktuj ją jako artykuł spisowy, * {{Code|czy_glowny_spis_tresci}} {{Patrz|czy_glowny_spis_tresci}} - uważaj artykuł główny podręcznika za stronę jego główną, w przeciwnie jest traktowany jako artykuł spisowy, przy ustawionej zmiennej: {{LinkPatrz|czy_usun_okladka}}, na wartość prawdziwą, ale przy innej wartości logicznej tego parametru, taki artykuł zostaje uznany za niespisowy. Funkcja zwraca, zrzucane przez tę funkcję, dane w postaci {{ZobaczTeż|parametry zwracane spisu artykularnego}}: <syntaxhighlight lang="lua"> return czy_artykul_nieglowny,numer_rodzaju_artykulu,czy_podrecznik,czy_artykuly_niespisowe; </syntaxhighlight> Wytłumaczenie parametrów zwracanych {{ZobaczTeż|opis parametrów spisu artykularnego}}: * {{Code|czy_artykul_nieglowny}} {{Patrz|czy_artykul_nieglowny}} - czy artykuł niegłówny, * {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}} - poziom artykułu w podręczniku, zwracany, jako drugi parametr funkcji: {{LinkPatrz|p.AnalizujLinkSzablonyOrazLinki}}, parsujących szablony i linki wewnętrzne, z artykułami, i wyciagający z nich wioski, i zaliczający je do pewnych kategorii, * {{Code|czy_podrecznik}} - jak w: {{LinkPatrz|czy_podrecznik}}, czyli czy to jest prawdziwy artykuł podręcznika, a nie udawany, * {{Code|czy_artykuly_niedozwolone}} {{Patrz|czy_artykuly_niedozwolone}} - czy artykuł uznać w linku za niedozwolony dla {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}} {{Code|{{=}}}} {{Code|1}}, artykuły o innej wartości o tej zmiennej poziomu są odrazu uznane za dozwolone. Funkcja oznacza artyluły określanej zmienną: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, równą: {{Code|1}}, jako za możliwie podręcznikowe, na podstawie zmiennej {{LinkPatrz|czy_podrecznik}}, dla innej wartości tego pierwszego to drugie zawsze przyjmuje wartość fałszywą. == {{Śródtytuł|p.CzySpecjalnyElementSpisuRzeczy}}{{Code|p.CzySpecjalnyElementSpisuRzeczy}} == Funkcja ma ten sam opis, co: {{LinkŚródtytuł|p.CzyElementSpisuRzeczy}}, są te same znaczenia parametrów przyjmowanych i zwracanych przez funkcję. Funkcja rozważa artykuły znajdujące się w definicji szablonu {{s|SpisTreści}} {{Patrz|SpisTreści}}, które są na pewno artykułami książki, bo taka jest definicja tego szablonu. We pozostałych przypadkach funkcja sprawdza szablony, a w nich linki, zdefiniowane przez tabelę {{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> Ta tablica przedstawia klucze i ich wartości charakteryzujące linki, w przypadku tego pierwszego, czyli {{s|SpisPozycja}}, parametrem szukanym z linkami jest: {{Parametr|numer_link|tyt}}, a w tym drugim, czyli: {{s|SpisZw}}, jest: {{Parametr|link|2}}. Wartości tych parametrów w tabeli parametrów szablonów o tych nazwach parametrów (kluczy) przedstawiają dowolny tekst, a w tym możliwie znajdujące się linki szablonów inteligetnych według obiektu: {{Code|SZABLON}}, jak i na podstawie: {{Code|LINKW}}, jako normalne linki wewnętrzne. A tam szukamy linków, określonych w tej wypowiedzi, znajdujemy, jeśli jest, pierwszego takiego linku, jak znajdziemy, to z wyniku funkcji: {{Patrz|p.CzyElementSpisuRzeczy}}, zrzucamy wynik do funkcji w nagłówku, którego pierwszy argument ma wartość prawdziwą, i zakańczamy natychmiast tą funkcję. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci)...end; </syntaxhighlight> Parametry funkcji: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}. Funkcja zwraca, zrzucane przez tę funkcję, dane parametry w postaci: * Są te same parametry zwracane, co dla: {{LinkZobaczTeż|parametry zwracane spisu artykularnego}}, te szablony są opisane tablicą: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, * Dla szablonu {{LinkPatrz|SpisTreści}}, funkcja zrzuca zmienne, które da się jeszcze wytłumaczyć według {{LinkZobaczTeż|opis parametrów spisu artykularnego}}, co do dwóch pierwszych parametrów: <syntaxhighlight lang="lua"> return true,1; </syntaxhighlight> Dla pozostałych obsługiwanych szablonów przez tę funkcję, parametrami zwracanymi przez nią są we wskazaniu wartości zwracane przez funkcję użytą przez procedurę używaną w jego definicji, jest to funkcja wspomniana w opisie: <syntaxhighlight lang="lua"> return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez nią: * To samo wytłumaczenie, co dla: {{LinkZobaczTeż|opis parametrów spisu artykularnego}}. == {{Śródtytuł|p.CzyGeneralnieElementSpisuRzeczy}}{{Code|p.CzyGeneralnieElementSpisuRzeczy}} == Funkcja ma ten sam opis, co: {{LinkŚródtytuł|p.CzyElementSpisuRzeczy}} - ta funkcja zostanie uruchomiona w pierwszej kolejności, lub: {{LinkŚródtytuł|p.CzySpecjalnyElementSpisuRzeczy}} - jeżeli ta pierwsza funkcja nie zrzuci treściwych wyników, to zostanie wywołana ta druga, jaka z nich funkcja zostanie uruchomina ze zwróconymi jej parametrami zależy od rodzaju wywołania szablonowego, w tej funkcji są te same znaczenia parametrów przyjmowanych i zwracanych przez funkcję, co wspomnianych dwóch. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci)...end; </syntaxhighlight> Parametry funkcji: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}. Funkcja zwraca, zrzucane przez tę funkcję, dane parametry w postaci: * Są te same parametry zwracane, co dla: {{LinkZobaczTeż|parametry zwracane spisu artykularnego}}, te szablony są opisane tablicą: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}. Parametrami zwracanymi przez funkcję są we wskazaniu wartości zwracane przez tą ostatnią wpomnianą procedurę: <syntaxhighlight lang="lua"> return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez nią: * To samo wytłumaczenie, co dla: {{LinkZobaczTeż|opis parametrów spisu artykularnego}}. == {{Śródtytuł|p.CzyTamElementyNieSpisoweArtykularne}}{{Code|p.CzyTamElementyNieSpisoweArtykularne}} == Funkcja szuka pierwszego spisowego artykularnego dozwolonego, czyli nieokładkowego, niegłównego w podręczniku, artykułu w linii {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja wyszukuje takie artykuły inną funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy}}, w wyniku iterowania po podanym parametrze zakodowanym przy pomocy funkcji z: {{Code|{{m|Szablonowe}}}}. Gdy funkcja znalazła taki artykuł, ale nie artykuł główny, ale nie okładkę, lub dozwolony artykuł, to zwraca {{Code|true}}, jak ona nie znalazła żadnego takiego artykułu, lub znalazła okładkę, lub inny podobny, to zwraca {{Code|false}}, a w przypadku tylko elementów niespisowych funkcja zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}, ** Zamiast pierwszych trzech parametrów, tzn.: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jest: {{Code|linia}} - jak w: {{LinkPatrz|linia|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, ** Ona nie ma w sobie, w swojej definicji, końcowych parametrów, tzn. {{Code|czy_usun_okladka}} {{LinkPatrz|czy_usun_okladka}} i {{Code|czy_glowny_spis_tresci}} {{LinkPatrz|czy_glowny_spis_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mkcuu7b22iqgcwg5r5hyqk0fsrigzb8 552660 552655 2026-08-21T06:45:25Z Persino 2851 552660 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.CzyElementSpisuRzeczy}}{{Code|p.CzyElementSpisuRzeczy}} == Funkcja sprawdza, czy wywołanie szablonowe, obiekty typu {{Code|SZABLON}}, linkuje do artykułu w książce, lub obiekt {{Code|LINKW}}, też musi być artykułem (podstroną) tego podręcznika. Funkcja sprawdza, czy ten artykuł nie jest artykułem okładką, czy innym niedozwolonym artykułem, to zależy od tego od definicji, to jest robione i sprawdzane tablicą {{Patrz|p.artykularne_niespisowe}}, którego określenie: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Funkcja traktuje stronę za podręcznik, jeżeli jest spełnione {{Patrz|czy_podrecznik}}: <syntaxhighlight lang="lua"> local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))); </syntaxhighlight> Artykuł książki powinien zaczynać się od dużej litery oraz nie powinien mieć po małej literze dużą lub w sobie powinien mieć dowolne dozwolone, przez mechanizm '''MediaWiki''', znaki odstępu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.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,czy_usun_okladka,czy_glowny_spis_tresci) </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry funkcji spisu artykularnego}}: * {{Code|szablon}} {{Patrz|szablon}} - wnętrze jakiego zakodowanego obiektu, * {{Code|obiekt}} {{Patrz|obiekt}} - typ tego obiektu, * {{Code|kod}} {{Patrz|kod}} - kod tego obiektu, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno jest to: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''', i '''nazwa książki''', * {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści w podręcznikiem, jego wartością możeb być wartość pusta, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa spisu w wersji szablonowej, bez przestrzeni nazw {{Np|Template|link=tak}}, dla przestrzeni {{Np|(main)|link=tak}}, jest z dwukropkiem na początku, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych zakodowanego tekstu, dla różnych obiektów {{LinkPatrz|obiekt}} z róznymi numerami elementów w nim {{LinkPatrz|kod}} * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica niektórych, nie wszystkich, przetworzonych elementów z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, w wyniku użycia pewnych funkcji,, * {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tablica nazw spisu przekierowaniowego, używanego przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.AnalizujLinkSzablonyOrazLinki}}, * {{Code|czy_usun_okladka}} {{Patrz|czy_usun_okladka}} - uważaj artykuł wszystkie, nawet okładki i inne tego typu, jako spisowe, traktuj ją jako artykuł spisowy, * {{Code|czy_glowny_spis_tresci}} {{Patrz|czy_glowny_spis_tresci}} - uważaj artykuł główny podręcznika za stronę jego główną, w przeciwnie jest traktowany jako artykuł spisowy, przy ustawionej zmiennej: {{LinkPatrz|czy_usun_okladka}}, na wartość prawdziwą, ale przy innej wartości logicznej tego parametru, taki artykuł zostaje uznany za niespisowy. Funkcja zwraca, zrzucane przez tę funkcję, dane w postaci {{ZobaczTeż|parametry zwracane spisu artykularnego}}: <syntaxhighlight lang="lua"> return czy_artykul_nieglowny,numer_rodzaju_artykulu,czy_podrecznik,czy_artykuly_niespisowe; </syntaxhighlight> Wytłumaczenie parametrów zwracanych {{ZobaczTeż|opis parametrów spisu artykularnego}}: * {{Code|czy_artykul_nieglowny}} {{Patrz|czy_artykul_nieglowny}} - czy artykuł niegłówny, * {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}} - poziom artykułu w podręczniku, zwracany, jako drugi parametr funkcji: {{LinkPatrz|p.AnalizujLinkSzablonyOrazLinki}}, parsujących szablony i linki wewnętrzne, z artykułami, i wyciagający z nich wioski, i zaliczający je do pewnych kategorii, * {{Code|czy_podrecznik}} - jak w: {{LinkPatrz|czy_podrecznik}}, czyli czy to jest prawdziwy artykuł podręcznika, a nie udawany, * {{Code|czy_artykuly_niedozwolone}} {{Patrz|czy_artykuly_niedozwolone}} - czy artykuł uznać w linku za niedozwolony dla {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}} {{Code|{{=}}}} {{Code|1}}, artykuły o innej wartości o tej zmiennej poziomu są odrazu uznane za dozwolone. Funkcja oznacza artyluły określanej zmienną: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, równą: {{Code|1}}, jako za możliwie podręcznikowe, na podstawie zmiennej {{LinkPatrz|czy_podrecznik}}, dla innej wartości tego pierwszego to drugie zawsze przyjmuje wartość fałszywą. == {{Śródtytuł|p.CzySpecjalnyElementSpisuRzeczy}}{{Code|p.CzySpecjalnyElementSpisuRzeczy}} == Funkcja ma ten sam opis, co: {{LinkŚródtytuł|p.CzyElementSpisuRzeczy}}, są te same znaczenia parametrów przyjmowanych i zwracanych przez funkcję. Funkcja rozważa artykuły znajdujące się w definicji szablonu {{s|SpisTreści}} {{Patrz|SpisTreści}}, które są na pewno artykułami książki, bo taka jest definicja tego szablonu. We pozostałych przypadkach funkcja sprawdza szablony, a w nich linki, zdefiniowane przez tabelę {{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> Ta tablica przedstawia klucze i ich wartości charakteryzujące linki, w przypadku tego pierwszego, czyli {{s|SpisPozycja}}, parametrem szukanym z linkami jest: {{Parametr|numer_link|tyt}}, a w tym drugim, czyli: {{s|SpisZw}}, jest: {{Parametr|link|2}}. Wartości tych parametrów w tabeli parametrów szablonów o tych nazwach parametrów (kluczy) przedstawiają dowolny tekst, a w tym możliwie znajdujące się linki szablonów inteligetnych według obiektu: {{Code|SZABLON}}, jak i na podstawie: {{Code|LINKW}}, jako normalne linki wewnętrzne. A tam szukamy linków, określonych w tej wypowiedzi, znajdujemy, jeśli jest, pierwszego takiego linku, jak znajdziemy, to z wyniku funkcji: {{Patrz|p.CzyElementSpisuRzeczy}}, zrzucamy wynik do funkcji w nagłówku, którego pierwszy argument ma wartość prawdziwą, i zakańczamy natychmiast tą funkcję. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci)...end; </syntaxhighlight> Parametry funkcji: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}. Funkcja zwraca, zrzucane przez tę funkcję, dane parametry w postaci: * Są te same parametry zwracane, co dla: {{LinkZobaczTeż|parametry zwracane spisu artykularnego}}, te szablony są opisane tablicą: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, * Dla szablonu {{LinkPatrz|SpisTreści}}, funkcja zrzuca zmienne, które da się jeszcze wytłumaczyć według {{LinkZobaczTeż|opis parametrów spisu artykularnego}}, co do dwóch pierwszych parametrów: <syntaxhighlight lang="lua"> return true,1; </syntaxhighlight> Dla pozostałych obsługiwanych szablonów przez tę funkcję, parametrami zwracanymi przez nią są we wskazaniu wartości zwracane przez funkcję użytą przez procedurę używaną w jego definicji, jest to funkcja wspomniana w opisie: <syntaxhighlight lang="lua"> return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez nią: * To samo wytłumaczenie, co dla: {{LinkZobaczTeż|opis parametrów spisu artykularnego}}. == {{Śródtytuł|p.CzyGeneralnieElementSpisuRzeczy}}{{Code|p.CzyGeneralnieElementSpisuRzeczy}} == Funkcja ma ten sam opis, co: {{LinkŚródtytuł|p.CzyElementSpisuRzeczy}} - ta funkcja zostanie uruchomiona w pierwszej kolejności, lub: {{LinkŚródtytuł|p.CzySpecjalnyElementSpisuRzeczy}} - jeżeli ta pierwsza funkcja nie zrzuci treściwych wyników, to zostanie wywołana ta druga, jaka z nich funkcja zostanie uruchomina ze zwróconymi jej parametrami zależy od rodzaju wywołania szablonowego, w tej funkcji są te same znaczenia parametrów przyjmowanych i zwracanych przez funkcję, co wspomnianych dwóch. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci)...end; </syntaxhighlight> Parametry funkcji: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}. Funkcja zwraca, zrzucane przez tę funkcję, dane parametry w postaci: * Są te same parametry zwracane, co dla: {{LinkZobaczTeż|parametry zwracane spisu artykularnego}}, te szablony są opisane tablicą: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}. Parametrami zwracanymi przez funkcję są we wskazaniu wartości zwracane przez tą ostatnią wpomnianą procedurę: <syntaxhighlight lang="lua"> return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez nią: * To samo wytłumaczenie, co dla: {{LinkZobaczTeż|opis parametrów spisu artykularnego}}. == {{Śródtytuł|p.CzyTamElementyNieSpisoweArtykularne}}{{Code|p.CzyTamElementyNieSpisoweArtykularne}} == Funkcja szuka pierwszego spisowego artykularnego dozwolonego, czyli nieokładkowego, niegłównego w podręczniku, artykułu w linii {{LinkPatrz|linia}}. Funkcja wyszukuje takie artykuły inną funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy}}, w wyniku iterowania po podanym parametrze zakodowanym przy pomocy funkcji z: {{Code|{{m|Szablonowe}}}}. Gdy funkcja znalazła taki artykuł, ale nie artykuł główny, ale nie okładkę, lub dozwolony artykuł, to zwraca {{Code|true}}, jak ona nie znalazła żadnego takiego artykułu, lub znalazła okładkę, lub inny podobny, to zwraca {{Code|false}}, a w przypadku tylko elementów niespisowych funkcja zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}, ** Zamiast pierwszych trzech parametrów, tzn.: {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, jest: {{Code|linia}} {{Patrz|linia}} -jest to pojedyncza linia pomiędzy znakami noych linii lub elementami początku i końca tekstu, ** Ona nie ma w sobie, w swojej definicji, końcowych parametrów, tzn. {{Code|czy_usun_okladka}} {{LinkPatrz|czy_usun_okladka}} i {{Code|czy_glowny_spis_tresci}} {{LinkPatrz|czy_glowny_spis_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> iuuigwic3taxh5zdm6kylzpp5u0ryqq 552672 552660 2026-08-21T09:06:10Z Persino 2851 552672 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.CzyElementSpisuRzeczy}}{{Code|p.CzyElementSpisuRzeczy}} == Funkcja sprawdza, czy wywołanie szablonowe, obiekty typu {{Code|SZABLON}}, linkuje do artykułu w książce, lub obiekt {{Code|LINKW}}, też musi być artykułem (podstroną) tego podręcznika. Funkcja sprawdza, czy ten artykuł nie jest artykułem okładką, czy innym niedozwolonym artykułem, to zależy od tego od definicji, to jest robione i sprawdzane tablicą {{Patrz|p.artykularne_niespisowe}}, którego określenie: <syntaxhighlight lang="lua"> p.artykularne_niespisowe={ [1]="^[Oo][Kk][ŁłLl][Aa][Dd][Kk][Aa]$", --[2]="^[Ww][Ss][Tt][ĘęEe][Pp]$", }; </syntaxhighlight> Funkcja traktuje stronę za podręcznik, jeżeli jest spełnione {{Patrz|czy_podrecznik}}: <syntaxhighlight lang="lua"> local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))); </syntaxhighlight> Artykuł książki powinien zaczynać się od dużej litery oraz nie powinien mieć po małej literze dużą lub w sobie powinien mieć dowolne dozwolone, przez mechanizm '''MediaWiki''', znaki odstępu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.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,czy_usun_okladka,czy_glowny_spis_tresci) </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry funkcji spisu artykularnego}}: * {{Code|szablon}} {{Patrz|szablon}} - wnętrze jakiego zakodowanego obiektu, * {{Code|obiekt}} {{Patrz|obiekt}} - typ tego obiektu, * {{Code|kod}} {{Patrz|kod}} - kod tego obiektu, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno jest to: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''', i '''nazwa książki''', * {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} - nazwa artykułu spisu treści w podręcznikiem, jego wartością może być wartość pusta, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa spisu w wersji szablonowej, bez przestrzeni nazw {{Np|Template|link=tak}}, dla przestrzeni {{Np|(main)|link=tak}}, jest z dwukropkiem na początku, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych zakodowanego tekstu, dla różnych obiektów {{LinkPatrz|obiekt}} z róznymi numerami elementów w nim {{LinkPatrz|kod}} * {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} - tablica niektórych, nie wszystkich, przetworzonych elementów z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, w wyniku użycia pewnych funkcji, * {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} - tablica nazw spisu przekierowaniowego, używanego przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.AnalizujLinkSzablonyOrazLinki}}, * {{Code|czy_usun_okladka}} {{Patrz|czy_usun_okladka}} - uważaj artykuły wszystkie, nawet okładki i inne tego typu, jako spisowe, traktuj ją jako artykuł spisowy, * {{Code|czy_glowny_spis_tresci}} {{Patrz|czy_glowny_spis_tresci}} - uważaj artykuł główny podręcznika za dozwoloną stronę jego główną, w przeciwnie jest traktowany jako artykuł spisowy, przy ustawionej zmiennej: {{LinkPatrz|czy_usun_okladka}}, na wartość prawdziwą, ale przy innej wartości logicznej tego parametru, taki artykuł zostaje uznany za niedozwolony. Funkcja zwraca, zrzucane przez tę funkcję, dane w postaci {{ZobaczTeż|parametry zwracane spisu artykularnego}}: <syntaxhighlight lang="lua"> return czy_artykul_nieglowny,numer_rodzaju_artykulu,czy_podrecznik,czy_artykuly_niespisowe; </syntaxhighlight> Wytłumaczenie parametrów zwracanych {{ZobaczTeż|opis parametrów spisu artykularnego}}: * {{Code|czy_artykul_nieglowny}} {{Patrz|czy_artykul_nieglowny}} - czy artykuł niegłówny, * {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}} - poziom artykułu w podręczniku, zwracany, jako drugi parametr funkcji: {{LinkPatrz|p.AnalizujLinkSzablonyOrazLinki}}, parsujących szablony i linki wewnętrzne, z artykułami, i wyciagający z nich wioski, i zaliczający je do pewnych kategorii, * {{Code|czy_podrecznik}} - jak w: {{LinkPatrz|czy_podrecznik}}, czyli czy to jest prawdziwy artykuł podręcznika, a nie udawany, * {{Code|czy_artykuly_niedozwolone}} {{Patrz|czy_artykuly_niedozwolone}} - czy artykuł uznać w linku za niedozwolony dla {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}} {{Code|{{=}}}} {{Code|1}}, artykuły o innej wartości o tej zmiennej poziomu są odrazu uznane za dozwolone. Funkcja oznacza artyluły określane zmienną: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, równą: {{Code|1}}, dla innej wartości funnkcja zzucza wartości: {{Code|return nil,false;}}, a dla tego pierwszego dzięki tej zmiennej: {{LinkPatrz|czy_podrecznik}}, funkcja oznacza artykuły za pożliwie podręcznikowe, jeśli ona przyjmuje wartość prawdziwą, jeśli nie, to one są możliwie niepodręcznikowe. == {{Śródtytuł|p.CzySpecjalnyElementSpisuRzeczy}}{{Code|p.CzySpecjalnyElementSpisuRzeczy}} == Funkcja ma ten sam opis, co: {{LinkŚródtytuł|p.CzyElementSpisuRzeczy}}, są te same znaczenia parametrów przyjmowanych i zwracanych przez funkcję. Funkcja rozważa artykuły znajdujące się w definicji szablonu {{s|SpisTreści}} {{Patrz|SpisTreści}}, które są na pewno artykułami książki, bo taka jest definicja tego szablonu. We pozostałych przypadkach funkcja sprawdza szablony, a w nich linki, zdefiniowane przez tabelę {{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> Ta tablica przedstawia klucze i ich wartości charakteryzujące linki, w przypadku tego pierwszego, czyli {{s|SpisPozycja}}, parametrem szukanym z linkami jest: {{Parametr|numer_link|tyt}}, a w tym drugim, czyli: {{s|SpisZw}}, jest: {{Parametr|link|2}}. Wartości tych parametrów w tabeli parametrów szablonów o tych nazwach parametrów (kluczy) przedstawiają dowolny tekst, a w tym możliwie znajdujące się linki szablonów inteligetnych według obiektu: {{Code|SZABLON}}, jak i na podstawie: {{Code|LINKW}}, jako normalne linki wewnętrzne. A tam szukamy linków, określonych w tej wypowiedzi, znajdujemy, jeśli jest, pierwszego takiego linku, jak znajdziemy, to z wyniku funkcji: {{Patrz|p.CzyElementSpisuRzeczy}}, zrzucamy wynik do funkcji w nagłówku, którego pierwszy argument ma wartość prawdziwą, i zakańczamy natychmiast tą funkcję. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzySpecjalnyElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci)...end; </syntaxhighlight> Parametry funkcji: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}. Funkcja zwraca, zrzucane przez tę funkcję, dane parametry w postaci: * Są te same parametry zwracane, co dla: {{LinkZobaczTeż|parametry zwracane spisu artykularnego}}, te szablony są opisane tablicą: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, * Dla szablonu {{LinkPatrz|SpisTreści}}, funkcja zrzuca zmienne, które da się jeszcze wytłumaczyć według {{LinkZobaczTeż|opis parametrów spisu artykularnego}}, co do dwóch pierwszych parametrów: <syntaxhighlight lang="lua"> return true,1; </syntaxhighlight> Dla pozostałych obsługiwanych szablonów przez tę funkcję, parametrami zwracanymi przez nią, są we wskazaniu wartości zwracane przez funkcję użytą przez procedurę używaną w jego definicji, jest to funkcja wspomniana w opisie: <syntaxhighlight lang="lua"> return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez nią: * To samo wytłumaczenie, co dla: {{LinkZobaczTeż|opis parametrów spisu artykularnego}}. == {{Śródtytuł|p.CzyGeneralnieElementSpisuRzeczy}}{{Code|p.CzyGeneralnieElementSpisuRzeczy}} == Funkcja ma ten sam opis, co: {{LinkŚródtytuł|p.CzyElementSpisuRzeczy}} - ta funkcja zostanie uruchomiona w pierwszej kolejności, lub: {{LinkŚródtytuł|p.CzySpecjalnyElementSpisuRzeczy}} - jeżeli ta pierwsza funkcja nie zrzuci treściwych wyników, to zostanie wywołana ta druga, jaka z nich funkcja zostanie uruchomiona ze zwróconymi jej parametrami zależy od rodzaju wywołania szablonowego, w tej funkcji są te same znaczenia parametrów przyjmowanych i zwracanych przez funkcję, co wspomnianych dwóch. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyGeneralnieElementSpisuRzeczy(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,czy_usun_okladka,czy_glowny_spis_tresci)...end; </syntaxhighlight> Parametry funkcji: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}. Funkcja zwraca, zrzucane przez tę funkcję, dane parametry w postaci: * Są te same parametry zwracane, co dla: {{LinkZobaczTeż|parametry zwracane spisu artykularnego}}, te szablony są opisane tablicą: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}. Parametrami zwracanymi przez funkcję są we wskazaniu wartości zwracane przez tą ostatnią wpomnianą procedurę: <syntaxhighlight lang="lua"> return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez nią: * To samo wytłumaczenie, co dla: {{LinkZobaczTeż|opis parametrów spisu artykularnego}}. == {{Śródtytuł|p.CzyTamElementyNieSpisoweArtykularne}}{{Code|p.CzyTamElementyNieSpisoweArtykularne}} == Funkcja szuka pierwszego spisowego artykularnego dozwolonego, czyli nieokładkowego, niegłównego w podręczniku, artykułu w linii {{LinkPatrz|linia}}. Funkcja wyszukuje takie artykuły inną funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy}}, w wyniku iterowania po podanym parametrze zakodowanym przy pomocy funkcji z: {{Code|{{m|Szablonowe}}}}. Gdy funkcja znalazła taki artykuł, ale nie artykuł główny, ale nie okładkę, lub dozwolony artykuł, to zwraca {{Code|true}}, jak ona nie znalazła żadnego takiego artykułu, lub znalazła okładkę, lub inny podobny, to zwraca {{Code|false}}, a w przypadku tylko elementów niespisowych funkcja zwraca zawsze wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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: * Są te same parametry, co dla: {{LinkZobaczTeż|parametry funkcji spisu artykularnego}}, ** Zamiast pierwszych trzech parametrów, tzn.: {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, jest: {{Code|linia}} {{Patrz|linia}} - jest to pojedyncza linia pomiędzy znakami noych linii lub elementami początku i końca tekstu, ** Ona nie ma w sobie, w swojej definicji, końcowych parametrów, tzn. {{Code|czy_usun_okladka}} {{LinkPatrz|czy_usun_okladka}} i {{Code|czy_glowny_spis_tresci}} {{LinkPatrz|czy_glowny_spis_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5vfl18v7zkhtdkmrpfl9lucn2v4ws52 Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom I 4 63918 552645 551774 2026-08-21T05:34:12Z Persino 2851 /* {{Śródtytuł|p.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} */ 552645 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie tryby znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}. Można przeszukiwać ciąg tekstowy od tyłu przy prawdziwej, lub odpowiadającej, wartości: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej ono szuka podciągi od przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to następne przeszukiwanie ma się odbyć po ostatnim wyszukiwanym znaku, przeciwnie jeśli {{Code|false/nil}}, to następne przeszukiwanie ma się odbyć od ostatniego wyszukiwanym znaku, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to po nim. Jest to ogólna funkcja do znajdowania podciągów znaków,używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona niedość, że przechytuje ciągu znakowe, ale też podaje od którego, do którego ten wyszukany ciąg wyszukał podany we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Dopadsowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wwartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, któregonumer znaku końcowego ciągu w podciągu,jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, jeżeli było, a jeśli ni znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli np. znaku ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3rko42sehdmwuw6ngkkewk2cutx8i42 552652 552645 2026-08-21T06:14:20Z Persino 2851 Persino przeniósł(-osła) stronę [[Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom III]] do [[Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom I-tymczasowy]], bez pozostawienia przekierowania pod starym tytułem 552645 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie tryby znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}. Można przeszukiwać ciąg tekstowy od tyłu przy prawdziwej, lub odpowiadającej, wartości: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej ono szuka podciągi od przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to następne przeszukiwanie ma się odbyć po ostatnim wyszukiwanym znaku, przeciwnie jeśli {{Code|false/nil}}, to następne przeszukiwanie ma się odbyć od ostatniego wyszukiwanym znaku, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to po nim. Jest to ogólna funkcja do znajdowania podciągów znaków,używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona niedość, że przechytuje ciągu znakowe, ale też podaje od którego, do którego ten wyszukany ciąg wyszukał podany we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Dopadsowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wwartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, któregonumer znaku końcowego ciągu w podciągu,jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, jeżeli było, a jeśli ni znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli np. znaku ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3rko42sehdmwuw6ngkkewk2cutx8i42 552654 552652 2026-08-21T06:15:32Z Persino 2851 Persino przeniósł(-osła) stronę [[Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom I-tymczasowy]] do [[Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom I]], bez pozostawienia przekierowania pod starym tytułem 552645 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie tryby znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}. Można przeszukiwać ciąg tekstowy od tyłu przy prawdziwej, lub odpowiadającej, wartości: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej ono szuka podciągi od przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to następne przeszukiwanie ma się odbyć po ostatnim wyszukiwanym znaku, przeciwnie jeśli {{Code|false/nil}}, to następne przeszukiwanie ma się odbyć od ostatniego wyszukiwanym znaku, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to po nim. Jest to ogólna funkcja do znajdowania podciągów znaków,używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona niedość, że przechytuje ciągu znakowe, ale też podaje od którego, do którego ten wyszukany ciąg wyszukał podany we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}. Dopadsowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wwartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, któregonumer znaku końcowego ciągu w podciągu,jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, jeżeli było, a jeśli ni znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli np. znaku ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3rko42sehdmwuw6ngkkewk2cutx8i42 552666 552654 2026-08-21T07:31:06Z Persino 2851 /* {{Śródtytuł|p.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} */ 552666 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie tryby znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}. Można przeszukiwać ciąg tekstowy od tyłu przy prawdziwej, lub odpowiadającej, wartości: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej ono szuka podciągi od przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to następne przeszukiwanie ma się odbyć po ostatnim wyszukiwanym znaku, przeciwnie jeśli {{Code|false/nil}}, to następne przeszukiwanie ma się odbyć od ostatniego wyszukiwanym znaku, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to po nim. Jest to ogólna funkcja do znajdowania podciągów znaków, używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona nie dość, że przechytuje ciągu znakowe, ale też podaje, od którego, do którego, ten wyszukany ciąg wyszukał w podanym we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, w innych przypadkach, gdyby te warunkinie były spełnionem to ta funkcja zwraca wartość nilową. Dopadsowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, którego numer znaku końcowego ciągu w podciągu, jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, jeżeli byłoby, a jeśli nie znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli np. znaku ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fruhum9kkaoego3rypjffu8lart4epi 552667 552666 2026-08-21T08:01:12Z Persino 2851 552667 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie tryby znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}. Można przeszukiwać ciąg tekstowy od tyłu przy prawdziwej, lub odpowiadającej, wartości: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej ono szuka podciągi od przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to następne przeszukiwanie ma się odbyć po ostatnim wyszukiwanym znaku, przeciwnie jeśli {{Code|false/nil}}, to następne przeszukiwanie ma się odbyć od ostatniego wyszukiwanym znaku, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to po nim. Jest to ogólna funkcja do znajdowania podciągów znaków, używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona nie dość, że przechytuje ciągu znakowe, ale też podaje, od którego, do którego, ten wyszukany ciąg wyszukał w podanym we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, w innych przypadkach, gdyby ten warunek nie był spełniony, to ta funkcja zwraca wartość nilową. Dopasowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, którego numer znaku końcowego ciągu w podciągu, jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, jeżeli byłoby, a jeśli nie znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli np. znaku ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> rqj1da0nnayetnupxg9m7k2pmagkwho 552668 552667 2026-08-21T08:31:15Z Persino 2851 /* {{Śródtytuł|p.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} */ 552668 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie trybu znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}, który przyjmuje wartości logiczne lub wartość nilową albo tej wartości można nie podawać, bo ostatni parametr. Można przeszukiwać ciąg tekstowy od tyłu przy wartości odpowiadającej prawdziwej, czyli parametr: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej wartości ono przeszukuje podciąg od natomiast do przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to wyszukiwanie ciągu tekstowego {{LinkPatrz|tekst}} ma się mieścić najbliżej odstatniego znaku {{LinkPatrz|liczba_do}}, a jeśli przyjmuje on wartość przeciwną, to najbliżej {{LinkPatrz|liczba_od}}, ale musi mieścić się we wskazanym przedziale, bo przeciwnie funkcja zrzuca wartość nilową, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to wyszukiwanie odbywa się znak po znaku, ale też w tym zakresie. Jest to ogólna funkcja do znajdowania podciągów znaków, używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona nie dość, że przechytuje ciągu znakowe, ale też podaje, od którego, do którego, ten wyszukany ciąg wyszukał w podanym we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, w innych przypadkach, gdyby ten warunek nie był spełniony, to ta funkcja zwraca wartość nilową. Dopasowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, którego numer znaku końcowego ciągu w podciągu, jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, spełniający nasze przedziały, jeżeli byłoby, a jeśli nie znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli np. znaku ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 96maf9dfpzz5wd58fqyzbcghywwii78 552669 552668 2026-08-21T08:32:33Z Persino 2851 /* {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} */ 552669 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie trybu znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}, który przyjmuje wartości logiczne lub wartość nilową albo tej wartości można nie podawać, bo ostatni parametr. Można przeszukiwać ciąg tekstowy od tyłu przy wartości odpowiadającej prawdziwej, czyli parametr: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej wartości ono przeszukuje podciąg od natomiast do przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to wyszukiwanie ciągu tekstowego {{LinkPatrz|tekst}} ma się mieścić najbliżej odstatniego znaku {{LinkPatrz|liczba_do}}, a jeśli przyjmuje on wartość przeciwną, to najbliżej {{LinkPatrz|liczba_od}}, ale musi mieścić się we wskazanym przedziale, bo przeciwnie funkcja zrzuca wartość nilową, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to wyszukiwanie odbywa się znak po znaku, ale też w tym zakresie. Jest to ogólna funkcja do znajdowania podciągów znaków, używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona nie dość, że przechytuje ciągu znakowe, ale też podaje, od którego, do którego, ten wyszukany ciąg wyszukał w podanym we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, w innych przypadkach, gdyby ten warunek nie był spełniony, to ta funkcja zwraca wartość nilową. Dopasowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, którego numer znaku końcowego ciągu w podciągu, jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, spełniający nasze przedziały, jeżeli byłoby, a jeśli nie znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli znaki ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> i4u600gn3gxs0gv3kbdatm3li8doosg 552670 552669 2026-08-21T08:34:40Z Persino 2851 /* {{Śródtytuł|p.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} */ 552670 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie trybu znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}, który przyjmuje wartości logiczne lub wartość nilową albo tej wartości można nie podawać, bo ostatni parametr. Można przeszukiwać ciąg tekstowy od tyłu przy wartości odpowiadającej prawdziwej, czyli parametr: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej wartości ono przeszukuje podciąg od natomiast do przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to wyszukiwanie ciągu tekstowego {{LinkPatrz|tekst}} ma się mieścić najbliżej odstatniego znaku {{LinkPatrz|liczba_do}}, a jeśli przyjmuje on wartość przeciwną, to najbliżej {{LinkPatrz|liczba_od}}, ale musi mieścić się we wskazanym przedziale, bo przeciwnie funkcja zrzuca wartość nilową, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to wyszukiwanie odbywa się znak po znaku, ale też w tym zakresie, ale też musi być to spełnione, jak dla wwielu znaku. Jest to ogólna funkcja do znajdowania podciągów znaków, używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona nie dość, że przechytuje ciągu znakowe, ale też podaje, od którego, do którego, ten wyszukany ciąg wyszukał w podanym we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, w innych przypadkach, gdyby ten warunek nie był spełniony, to ta funkcja zwraca wartość nilową. Dopasowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, którego numer znaku końcowego ciągu w podciągu, jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, spełniający nasze przedziały, jeżeli byłoby, a jeśli nie znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli znaki ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jexmx8v9coi8i044twg1ae2l3zfnky8 552671 552670 2026-08-21T08:37:23Z Persino 2851 /* {{Śródtytuł|p.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} */ 552671 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.SzukanieNaPodstawieWzoru}}{{Code|p.SzukanieNaPodstawieWzoru}} == Funkcja do przeszukiwania ciągu: {{Code|tekst}} {{LinkPatrz|tekst}}, od znaku: {{Code|liczba_od}} {{LinkPatrz|liczba_od}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, według wzoru {{Code|wzor}} {{LinkPatrz|wzor}}. Funkcja umożliwa ustawienie trybu znajdowania ciągów: {{Code|jak}} {{LinkPatrz|jak}}, który przyjmuje wartości logiczne lub wartość nilową albo tej wartości można nie podawać, bo ostatni parametr. Można przeszukiwać ciąg tekstowy od tyłu przy wartości odpowiadającej prawdziwej, czyli parametr: {{Code|czy_od_tylu}} {{LinkPatrz|czy_od_tylu}}, przy przeciwnej wartości ono przeszukuje podciąg od natomiast do przodu. Funkcja zwraca dwie pierwsze liczby oznaczające początek i koniec dopasowania według wzoru: {{LinkPatrz|wzor}}, i co najwyżej dziewięć dalszych elementów przychwytywanych przez nią. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}: * {{Code|tekst}} {{Patrz|tekst}} - tekst do przeszukania według wzoru, * {{Code|wzor}} {{Patrz|wzor}} - wzor do przeszukiwania tekstu, * Zmienne oznaczające numer znaku, w tekście {{LinkPatrz|tekst}}: ** {{Code|liczba_od}} {{Patrz|liczba_od}} - od którego ma być przeszukiwany ciąg, ** {{Code|liczba_do}} {{Patrz|liczba_do}} - do którego ma być przeszukiwany ciąg, * {{Code|czy_od_tylu}} {{Patrz|czy_od_tylu}} - czy przeszukiwanie ma się odbyć od tyłu, * {{Code|jak}} {{Patrz|jak}} - gdy {{Code|true}}, to wyszukiwanie ciągu tekstowego {{LinkPatrz|tekst}} ma się mieścić najbliżej odstatniego znaku {{LinkPatrz|liczba_do}}, a jeśli przyjmuje on wartość przeciwną, to najbliżej początku {{LinkPatrz|liczba_od}}, ale musi mieścić się we wskazanym przedziale, bo przeciwnie funkcja zrzuca wartość nilową, jeśli wyszukany ciąg nie składa się z jednego znaku, a jeśli tak, to wyszukiwanie odbywa się znak po znaku, ale też w tym zakresie, ale też musi być to spełnione, jak dla wwielu znaku. Jest to ogólna funkcja do znajdowania podciągów znaków, używa funkcji: {{LzLua|mw.ustring.find}} {{Patrz|mw.ustring.find}}, która ona nie dość, że przechytuje ciągu znakowe, ale też podaje, od którego, do którego, ten wyszukany ciąg wyszukał w podanym we wzorze. Przypadku wyszukiwania od przodu musi zachodzi wniosek: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&le;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, a od tyłu: {{Code|liczba_od}} {{LinkPatrz|liczba_od}} {{Code|&ge;}} {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, w innych przypadkach, gdyby ten warunek nie był spełniony, to ta funkcja zwraca wartość nilową. Dopasowanie do przodu, nie jest uruchamiane w żadnej petli, jeżeli to dopasowanie nie znalazło się w dozwolonych granicach dopasowania, to funkcja zwraca wartość {{Code|nil}}, w przypadku przeciwnym to ona zrzuca wartości przez nią zwrócone, tzn. przez: {{LinkPatrz|mw.ustring.find}}. W przypadku wyszukiwania od tyłu funkcja znajduje najbliższe dopasowanie najbliższe znaku o numerze: {{Code|liczba_do}} {{LinkPatrz|liczba_do}}, czyli równe ostatniemu takiemu dopasowaniu. To dopasowania jest uruchamiane w pętli nieskończonej, która jest przerywana, gdy funkcja nie znalazła zadnego dalszego znaku, lub uzyskano dopasowanie, którego numer znaku końcowego ciągu w podciągu, jest większy niż {{LinkPatrz|liczba_do}}. Funkcja zwraca ostatnie dopasowanie, to znaczy wartości zwrócone przez: {{LinkPatrz|mw.ustring.find}}, spełniający nasze przedziały, jeżeli byłoby, a jeśli nie znalazła takiego, to ona zwraca wynik {{Code|nil}}. == {{Śródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii}}{{Code|p.SzukanieNaPodstawieWzoruElementuLinii}} == Ta funkcja robi dokładnie to samo, co: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru}} {{Patrz|p.SzukanieNaPodstawieWzoru}}, która dotyczy przeszukiwanego tekstu, tylko z tym wyjątkiem, że funkcja w nagłówku służy do przeszukiwania każdej linii, niezależnie jak została umiejscowiona. Do wzoru: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, we wnętrzu tego wzoru dla linii charakteryzujcych właśnie nią zostają dodane elementu początku i końca linii, czyli znaki ze zbioru: {{Code|<nowiki>[^$\n]</nowiki>}} {{Patrz|elementy końca linii}}, w ten sposób jest tworzony wzor: {{Code|wzor}} {{LinkPatrz|wzor}}, we wnętrzu linii, by później można było go wykorzystać we funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. Wzor: {{Code|wzor_linia}} {{LinkPatrz|wzor_linia}}, nie powinien zawierać w sobie znaków: {{LinkPatrz|elementy końca linii}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu)...end; </syntaxhighlight> Parametry funkcji: * Są takie same parametry jak w: {{LinkZobaczTeż|Parametry-SzukanieNaPodstawieWzoru}}, oprócz parametru: {{Code|jak}} {{LinkPatrz|jak}}, a zamiast wzoru: {{Code|wzor}} {{LinkPatrz|wzor}}, jest: {{Code|wzor_linia}} {{Patrz|wzor_linia}}. Funkcja zwraca parametry uzyskane z funkcji: {{LinkPatrz|p.SzukanieNaPodstawieWzoru}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dwue5eoos1i7x20aij4ak4e12xpj063 Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom IV 4 63919 552644 552439 2026-08-21T05:27:29Z Persino 2851 /* {{Śródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} */ 552644 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, * {{Code|spis_naglowka_stare}} - spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mtqg7l3cu4v2lnbhtdaur6iw4fsbwaz 552646 552644 2026-08-21T05:45:18Z Persino 2851 /* {{Śródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} */ 552646 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|Parametry}}{{Code|Parametry}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Parametry(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, możliwe, że ta wartość nie istnieje, a więc wtedy brana jest ze: {{LinkPatrz|spis_naglowka_stare}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, * {{Code|spis_naglowka_stare}} - spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|Parametry}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2f8deobqjy02gpe942i8181math0ylp 552647 552646 2026-08-21T05:47:12Z Persino 2851 /* Funkcja zwracająca parametry */ 552647 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, możliwe, że ta wartość nie istnieje, a więc wtedy brana jest ze: {{LinkPatrz|spis_naglowka_stare}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, * {{Code|spis_naglowka_stare}} - spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> l1ql827jaupq69ed2f16ewms1mw167j 552648 552647 2026-08-21T05:54:32Z Persino 2851 /* {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} */ 552648 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, jeżeli parametr: {{LinkPatrz|czy_spis_tresci}}, istnieje, możliwe, że ta wartość nie istnieje, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka}} - możliwe, że ta wartość nie istnieje, wtedy ona jeest brana z: {{LinPatrz|spis_naglowka_stare}}, a póxniej dla nieistniejącego parametru: {{LinkPatrz|czy_spis_tresci}}, są robione podobne operacje, jak w punkcie: {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka_stare}} - spis przed analizą, wcześniej ten parametr był w wersji parametru powyższego ostatniego, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0tkorser2u4b9rpvfg22gfgi5cinh17 552649 552648 2026-08-21T05:55:01Z Persino 2851 /* {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} */ 552649 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, jeżeli parametr: {{LinkPatrz|czy_spis_tresci}}, istnieje, możliwe, że ta wartość nie istnieje, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} - początek rozdziału, według konfiguracji tekstowej, * {{Code|liczba_koniec}} - a tutaj jego koniec, * {{Code|spis_naglowka}} - możliwe, że ta wartość nie istnieje, wtedy ona jeest brana z: {{LinkPatrz|spis_naglowka_stare}}, a póxniej dla nieistniejącego parametru: {{LinkPatrz|czy_spis_tresci}}, są robione podobne operacje, jak w punkcie: {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka_stare}} - spis przed analizą, wcześniej ten parametr był w wersji parametru powyższego ostatniego, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2vfdmph41v66naipotcdurncdkhia6n 552650 552649 2026-08-21T06:09:21Z Persino 2851 /* {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} */ 552650 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - początek i koniec danego typu napisu wprowadzenia tekstu, tych typów jest wiele, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} {{Patrz|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, jeżeli parametr: {{LinkPatrz|czy_spis_tresci}}, istnieje, jest to robione poza tą funkcją, możliwe, że ta wartość nie istnieje, * {{Code|spis_naglowka_poziom}} {{Patrz|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, dla pozostałych nagłówków nie istnieje. Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - jest to powtórzenie parametrów dwóch pierwszych z parametrów tej funkcji, * {{Code|spis_naglowka}} - ten parametr jest liczony dla nieistniejącego parametru: {{LinkPatrz|czy_spis_tresci}}, są robione podobne operacje, jak w punkcie: {{LinkZobaczTeż|spis_naglowka}}, a jeżeli ten wpomniany parametr istnieje, to to nie jest robione w tej funkcji, * {{Code|spis_naglowka_stare}} - spis przed analizą, po którym ten parametr zamienia się w ten powyższy ostatni element, możliwe, że ten parametr nie istnieje, wtedy jest brany z: {{LinkPatrz|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> adh9cl564jd8l5zyxlwi1hn6c72nrsv 552657 552650 2026-08-21T06:20:44Z Persino 2851 552657 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - początek i koniec danego typu napisu wprowadzenia tekstu, tych typów jest wiele, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} {{Patrz|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom III}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, jeżeli parametr: {{LinkPatrz|czy_spis_tresci}}, istnieje, jest to robione poza tą funkcją, możliwe, że ta wartość nie istnieje, * {{Code|spis_naglowka_poziom}} {{Patrz|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, dla pozostałych nagłówków nie istnieje. Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - jest to powtórzenie parametrów dwóch pierwszych z parametrów tej funkcji, * {{Code|spis_naglowka}} - ten parametr jest liczony dla nieistniejącego parametru: {{LinkPatrz|czy_spis_tresci}}, są robione podobne operacje, jak w punkcie: {{LinkZobaczTeż|spis_naglowka}}, a jeżeli ten wpomniany parametr istnieje, to to nie jest robione w tej funkcji, * {{Code|spis_naglowka_stare}} - spis przed analizą, po którym ten parametr zamienia się w ten powyższy ostatni element, możliwe, że ten parametr nie istnieje, wtedy jest brany z: {{LinkPatrz|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1ju4se9azfc14w1otfmx2zc8191dxlj 552661 552657 2026-08-21T06:48:10Z Persino 2851 552661 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokuł stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie. * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - początek i koniec danego typu napisu wprowadzenia tekstu, tych typów jest wiele, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} {{Patrz|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, jeżeli parametr: {{LinkPatrz|czy_spis_tresci}}, istnieje, jest to robione poza tą funkcją, możliwe, że ta wartość nie istnieje, * {{Code|spis_naglowka_poziom}} {{Patrz|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, dla pozostałych nagłówków nie istnieje. Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - jest to powtórzenie parametrów dwóch pierwszych z parametrów tej funkcji, * {{Code|spis_naglowka}} - ten parametr jest liczony dla nieistniejącego parametru: {{LinkPatrz|czy_spis_tresci}}, są robione podobne operacje, jak w punkcie: {{LinkZobaczTeż|spis_naglowka}}, a jeżeli ten wpomniany parametr istnieje, to to nie jest robione w tej funkcji, * {{Code|spis_naglowka_stare}} - spis przed analizą, po którym ten parametr zamienia się w ten powyższy ostatni element, możliwe, że ten parametr nie istnieje, wtedy jest brany z: {{LinkPatrz|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w napisach wprowadzenia tekstu, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}}, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku, jego wartości całkowitej zawartości, czyli całego tego szablonu, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów, a także wyszukuje dalszy tekst, który jest do końca jego zawartości, a jeżeli je znalazł, to to zwraca, a jeżeli nie, to wyszukuje dalej w tej zawartości, lub idzie dalej przechodząc do dalszego rozdziału, generowanego przez jakiś szablon, i tak w kółko, aż skończą się dane. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> t036gp3rlw9dppjtk6qie4lju688col 552674 552661 2026-08-21T09:34:15Z Persino 2851 552674 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}}{{Code|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie}} == Funkcja wyszukuje w: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, najbliższy rozdział do przodu lub od tyłu w zależności od podanego parametru: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, w zakresach od: {{Code|liczba_od}} {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do: {{Code|liczba_do}} {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja znajdująca uwzględnia, że tekst {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, może być zakodowany w bazie kodów: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, a części jego bazy mogą być w postaci przeanalizowanej w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Funkcja przeszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja {{ZobaczTeż|rozdziały}} wyszukuje rozdziały dodatnie równaniowe albo centrowane szablonowo lub znacznikowo albo nagłówkowo, poprzez szablony, czy znaczniki nagłówków. * Rozdziały równaniowe, to są rozdziały otoczone wokół stron linii tekstu znakami {{Code|{{=}}}}, przykład: {{Code|<nowiki>== Tekst nagłówka ==</nowiki>}}, * Rozdziały, oczywiście, że dodatnie, nagłówkowe, to te: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{tag|h6}}, ** Lub przez użycie szablonu: {{s|HNumer}}, do generowania sztucznego nagłówka, ta funkcja generuje powyższe nagłówki, przy pomocy zachowania zgodności z rozdziałami dodatnimi rówaniowo, nawet gdy po lewej i poprawej, liczba {{Code|{{=}}}}, jest większa niż: {{Code|6}}, co normalnie jest niedozwolone, w jego pierwszy parametrze, który symbolizuje pewien rozdział dodatni równaniowo, * Centrowane szablonowo, oznaczone są szablonami: {{s|Ce}}, {{s|Centruj}} i {{s|Center}}, * Centrowane znacznikowo, oznaczone są znacznikami: {{Tag|center}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Definicja skrótowa funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} - tekst artykułu zakodowanego, w którym wyszukuje się rozdziały dodatnie, * {{Code|liczba_od}} - jak w: {{LinkPatrz|liczba_od|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|liczba_do}} - jak w: {{LinkPatrz|liczba_do|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|czy_od_tylu}} - jak w: {{LinkPatrz|czy_od_tylu|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|czy_spis_tresci}} {{Patrz|czy_spis_tresci}} - funkcja sprawdza, czy nagłówek spisu, jeśli istnieje, spełnia ściśle określone kryteria, jest to policzony nagłówek z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, z tego samego nagłówka, przed transformacją, z przechwyconego z elementu, w którym jest właśnie to, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, === Funkcja zwracająca parametry === Opis funkcji zwracającej parametry, która jest potrzebna właśnie do tego. ==== {{Śródtytuł|ParametryNapisuWprowadzeniaTekstu}}{{Code|ParametryNapisuWprowadzeniaTekstu}} ==== Funkcja przyjmuje i przygotowuje parametry do zwrócenia. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom)...end; </syntaxhighlight> Parametry funkcji: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - początek i koniec danego typu napisu wprowadzenia tekstu, tych typów jest wiele, * {{Code|spis_naglowka_stare}} {{Patrz|spis_naglowka_stare}}, spis przed analizą {{LinkZobaczTeż|spis_naglowka}}, * {{Code|spis_naglowka}} {{Patrz|spis_naglowka}} - spis {{ZobaczTeż|spis_naglowka}} przeanalizowany przez funkcję: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}, a później przez: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, jeżeli parametr: {{LinkPatrz|czy_spis_tresci}}, istnieje, jest to robione poza tą funkcją, możliwe, że ta wartość nie istnieje, * {{Code|spis_naglowka_poziom}} {{Patrz|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych, dla pozostałych nagłówków nie istnieje. Funcja zwraca parametry napisane ogólnie według kodu dla każdego rodzaju napisu wprowadzenia tekstu: <syntaxhighlight lang="lua"> return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; </syntaxhighlight> Wytłumaczenie parametrów zwracanych przez ten obiekt dla danego rodzaju rozdziału: * {{Code|liczba_start}} i {{Code|liczba_koniec}} - jest to powtórzenie parametrów dwóch pierwszych z parametrów tej funkcji, * {{Code|spis_naglowka}} - ten parametr jest liczony dla nieistniejącego parametru: {{LinkPatrz|czy_spis_tresci}}, są robione podobne operacje, jak w punkcie: {{LinkZobaczTeż|spis_naglowka}}, a jeżeli ten wpomniany parametr istnieje, to to nie jest robione w tej funkcji, * {{Code|spis_naglowka_stare}} - spis przed analizą, po którym ten parametr zamienia się w ten powyższy ostatni element, możliwe, że ten parametr nie istnieje, wtedy jest brany z: {{LinkPatrz|spis_naglowka}}, * {{Code|spis_naglowka_poziom}} - poziom nagłówka, funkcja dostępna dla rozdziałów dodatnich, szablonu {{s|HNumer}} i znaczników nagłówkowych. ==== Dalszy opis funkcji ==== Funkcja w nagłówku zwraca parametry bezpośrednio z: {{LinkŚródtytuł|ParametryNapisuWprowadzeniaTekstu}}. == {{Śródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}{{Code|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}} == Funkcja uwzględnia nagłówki według {{LinkZobaczTeż|rozdziały}}, oprócz nagłówków równaniowych. Zawartością w nagłówkach centrowania, jest to wartość pierwszego parametru, a w też szablonie w stucznych napisach wprowadzenia tekstu {{s|HNumer}}, też jego zawartość w pierwszym jego argumencie, ale pomiędzy taką samą maksymalną liczbą znaków {{Code|{{=}}}} w nim, i jeszcze w jego wersji strimowanej. Funkcja wyszukuje pierwszego dozwolonego linku użyte w funckji wspomniane poniżej, jego wartość całkowitej zawartości {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czyli całego takiego, typ obiektu, czyli: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, i liczbę w postaci numeru szablonu tego obiektu w bazie kodów {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, a także wyszukuje dalszy tekst, który jest do końca jego zawartości w kodzie reprezentowanym przez dwie zmienne, a jeżeli je znalazł, to to zwraca, te trzy zmienne i dalszy tekst, a jeżeli nie, to wyszukuje dalej w tej zawartości, aż skończą się w tym zasoby danych. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji {{Patrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}: * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Opis parametrów zwracanych dokończające jego dokumentację: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mozliwe wartości: {{Code|SZABLON}} (linku szablonowe), {{Code|LINKW}} (linki wewnętrzne)i i {{Code|LINKZ}} (linki zewnętrzne), * {{Code|kod}} - jak w: {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} - dalszy zwracany tekst w napisie wprowadzenia tekstu, po zwracanym jako jego parametry tej funkcji, czyli dalszego tekstu. Kod zwracanych parametrów funkcji: <syntaxhighlight lang="lua"> return szablon,obiekt,kod,dalszy_tekst; </syntaxhighlight> Fuuncja wyszukuje rozdziały, a w nich pierwsze linki, z: {{Code|obiekt}}, którymi są zakodowane linki wewnętrzne lub zewnętrzne, lub linku szablonowe, nawet inteligentne, którego nazwy są zakatologowane w tablicach, te linki mogą być inne, niż linki standardowe inteligentne {{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> Inne linki używane do definiowania spisów treści zdefiniowane w punkcie: {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Jeszcze inne linki, to tzw. linki inteligentne standardowe, w przeciwieństwie do powyższych, ale nie do końca, są generowane przez funkcję: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}} {{Patrz|p.PodzielNaElementyNazwowyWikiLinkInteligentny}}. Przykład wywołania funkcji wraz z jego udokomentowanymi parametrami z: {{LinkPatrz|parametry-SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu}}, czyli: <syntaxhighlight lang="lua"> local szablon,obiekt,kod,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> emboqdzu0081npyqka30unnxu6c692h Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom V 4 63920 552569 552568 2026-08-20T12:02:59Z Persino 2851 /* {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} */ 552569 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawwdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcka zwróciła wartość prawwdziwą to pętla jest przerywana, w przecciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje zwrócić do funkcji w nagłówku. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 20i0c5qi6l3qp3di93m1op26gvtqxnk 552570 552569 2026-08-20T12:05:00Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552570 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość prawdziwą, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5h3ucar80xjekbmlj6iwtyor87efes4 552571 552570 2026-08-20T12:05:40Z Persino 2851 /* {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} */ 552571 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość prawdziwą, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ejpsdwlbrusyxuzhg6fof53pq88lugy 552572 552571 2026-08-20T12:10:08Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552572 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracany jest przerywana pętla, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qjbcvvhupf0f3m9ndttdlzv97daeolh 552573 552572 2026-08-20T12:11:55Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552573 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> d7mbty9pdybzu531h0aep5uirqlmcl4 552574 552573 2026-08-20T12:26:49Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552574 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykkrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowwe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłóku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5wabpy7z09ao4orm86lhh9yslf46v1s 552575 552574 2026-08-20T12:27:02Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552575 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykkrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłóku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> oisuwhm0f693witp8yf3viw7y0a1zrf 552576 552575 2026-08-20T12:28:10Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552576 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> cq4p88grjhio54akwaraiy0jkpsoiyr 552577 552576 2026-08-20T12:46:01Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552577 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2rr2xrvfolpmd2tgohaxzvbj1kptif4 552578 552577 2026-08-20T13:21:43Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552578 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie ptrzyjmuje parametrów: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0s1slg6e5pymmukjrujvh3bha3k9md3 552579 552578 2026-08-20T13:22:38Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552579 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie ptrzyjmuje parametrów: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} - == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> d82ofcaa1xbeewrguhj50xmozr6abr2 552580 552579 2026-08-20T13:24:30Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552580 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} - == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hl2nby5l6xsc12hvrge02x2gvs9pzqo 552581 552580 2026-08-20T13:41:16Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552581 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2r5c0zzpcyi7enf2g09ghcq7cf2wszk 552582 552581 2026-08-20T13:47:59Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552582 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> klroofx3ccqzkt6huvf0lgguz3yy3lt 552583 552582 2026-08-20T13:50:16Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552583 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> oo73sbao0kwj20qcigg4m56s0syeix0 552584 552583 2026-08-20T13:58:01Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552584 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry zwracane przez funkcję, które są zwracane kolejno w niej: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta uzyskana linia jest rozdziałem spisu treści. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mbn7p7pgq38u0ayzkufksl3bja8551y 552585 552584 2026-08-20T14:02:12Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552585 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry zwracane przez funkcję, które są zwracane kolejno w niej: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskanai i zwrócona, linia jest rozdziałem spisu treści. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> kqbmbjsctyihvupzej24o6jyhjev7bv 552586 552585 2026-08-20T14:03:59Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552586 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskanai i zwrócona, linia jest rozdziałem spisu treści. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> r85qdcir1lj1cdcb6twfdceufeexd6s 552587 552586 2026-08-20T14:04:27Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552587 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8iswu1saz1zcrlntpoz0jec9p4g24xm 552588 552587 2026-08-20T15:10:53Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552588 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTez|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopaasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTez|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartośc minimalną pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pd7658om1kz1xmw1cl1e3p9ikxlduz7 552589 552588 2026-08-20T15:11:25Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552589 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopaasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTez|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartośc minimalną pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> p3zbo14gsmo9jhbk7euq4bb73f4rz77 552590 552589 2026-08-20T15:11:51Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552590 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopaasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTez|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartośc minimalną pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> b82ysdejj3rvttaerabie76u9yr0fl0 552591 552590 2026-08-20T15:13:00Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552591 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopaasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartośc minimalną pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 261iyxai6hczo6agt2t34nq69rtwlte 552592 552591 2026-08-20T15:13:36Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552592 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopaasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g9rdsg1r7t9ov3sx4ntz4rfa5w3x565 552593 552592 2026-08-20T15:13:57Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552593 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopaasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział, to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> o81vpor6qjwtydkhibwusbv45ddbp8r 552594 552593 2026-08-20T15:14:41Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552594 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartośc jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgaałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział, to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nxi5qmz5xwnz2kjooaqhlg6ealv792q 552595 552594 2026-08-20T15:19:49Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552595 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. **: Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. **: A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. **: Jeśli znaleziono taki rozdział, to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> htiiaxqc6kqqpahwm1rfporb6etcezl 552596 552595 2026-08-20T15:22:22Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552596 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest zwracane dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. * Możliwe alternatywy rozgałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z zamych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ** Przypadek istnienia linii nie składającej się ze znaków odstępów: *** Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi wykonania takiej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. *** A jeżeli ona nie składa się z tych znaków, a jeśli linia istnieje, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. *** Jeśli znaleziono taki rozdział, to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość. co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2i2v9hbhhc3ttagcloosknogqbv1b0e 552597 552596 2026-08-20T15:36:37Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552597 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}, jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ** A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). * Możliwe alternatywy rozgałęzień instrukcji warunkowej: ** Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ** Przypadek istnienia linii nie składającej się ze znaków odstępów: *** Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. *** A jeśsli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. *** Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5jdkt3e5kjarb22bhkwvznmjfix0bz1 552598 552597 2026-08-20T15:45:13Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552598 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Etap pierwszy{{dk}} : Uzykanie linii, czy brak, czy nie dopasowania: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 34xq8614ufqljr9dfp5eb7fz3c4dpap 552599 552598 2026-08-20T15:49:51Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552599 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Etap pierwszy{{dk}} : Uzykanie linii, czy brak, lub nie, dopasowania: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> d61xhii16dpysok6kvo3pjireugptgl 552600 552599 2026-08-20T15:51:19Z Persino 2851 552600 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Etap pierwszy{{dk}} : Uzykanie linii, czy brak, lub nie, dopasowania: * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tfiy3h73p0vt4m4wxuxe3h70yu7zlkx 552601 552600 2026-08-20T15:52:42Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552601 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje, które nie są okładkami, a jeśli tak jest, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> kzl2kuwiwqbyq5ra9272g4qrofgarxv 552602 552601 2026-08-20T16:00:06Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552602 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest,na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tfeluovxwlit9ml6n9y6kyja67iqy1y 552603 552602 2026-08-20T16:02:57Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552603 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest,na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ecpzig90zi75r3anzaejjik6uo89ebg 552604 552603 2026-08-20T16:05:59Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552604 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}} ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest,na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> r8v6o82tfgh9fe54wpu1jdqlfinf1ys 552605 552604 2026-08-20T16:13:50Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552605 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyslnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest,na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dp6pckm6asfkcj9wh879m1lpfmspl5w 552607 552605 2026-08-20T16:19:34Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552607 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest,na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> may4y8bp4rd9dzpehvmqx0rmf22kub9 552608 552607 2026-08-20T16:23:07Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552608 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Poczatek i koniec uzyskanej linii{{dk}} * Początek i koniec uzyskanej linii, to są pewne liczby, wraz ze znakami nowej linii. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3m5xr2jk3ew6sl7jajnzwrpaxx57e9n 552610 552608 2026-08-20T16:41:50Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552610 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzeny jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3qvcjbv3d77amra5li11qqezdctot3y 552611 552610 2026-08-20T16:45:29Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552611 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy ta linia jest rozdziałem zerowym na podstawie funkcji na podstawie: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gta6qhiqja6gbil1xi44o8xtiwnltho 552612 552611 2026-08-20T16:55:18Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552612 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fvfs7vg1hn6iqdyap93i6dsmyiwco5r 552624 552612 2026-08-20T17:56:02Z Persino 2851 552624 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Fubkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> d1zc8xkr2itpn3u2s4t7hh4lul4qh13 552625 552624 2026-08-20T18:38:29Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552625 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Fubkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona}} artykuł to okładka, czy inny niedozwolona strona,jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod_szablon}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{ZobaczTeż|niedozwolona strona}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1eoufcl9c52xrkltuts09xwcykhecdd 552626 552625 2026-08-20T18:39:12Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552626 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Fubkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona}} artykuł to okładka, czy inny niedozwolona strona,jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod_szablon}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{ZobaczTeż|niedozwolona strona}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3yv9bb1sqm4y8r13s6giej1okx7lhj1 552627 552626 2026-08-20T18:41:52Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552627 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Fubkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inny niedozwolona strona,jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod_szablon}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5f2nb35kjf55ntczl53lrudk7r0ntzs 552628 552627 2026-08-20T18:42:46Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552628 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Fubkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inny niedozwolona strona,jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod_szablon}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hc1zfaoibeehnh5s7gdfi8cu2j6u4jw 552629 552628 2026-08-20T18:43:48Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552629 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inny niedozwolona strona,jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod_szablon}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} ({{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) i {{Code|kod}} ({{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dw59b692l27wg9ad1pr30411afcr4mk 552630 552629 2026-08-20T18:44:59Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552630 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inny niedozwolona strona,jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ej2jio7xati9yhwyql1ny5c57epk3ep 552631 552630 2026-08-20T18:45:45Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552631 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}) (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 6w0mckk8tl8ijgn475m6vvq5v9ut7ie 552632 552631 2026-08-20T18:46:12Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552632 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znadujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> itmj9kz4d8kur27gft5pwonai50426x 552633 552632 2026-08-20T18:48:00Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552633 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość {{Patrz|wartość spisowa}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tbskie9ouwe336x8eac55uyw5a9d16q 552634 552633 2026-08-20T18:56:30Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552634 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} ({{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}), {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sqj6momk9nwurstjxaiklo9rt2h1cc5 552635 552634 2026-08-20T18:57:50Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552635 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest,czy to są linie z ostępami lub nie będące elementami listy, ale w sposób roizszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> bn92fhljrirgi7vpvu9u5i343nqi2pb 552637 552635 2026-08-20T19:59:40Z Persino 2851 /* {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} */ 552637 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artkularne nie okładkowe danej ksiązki lub inne,nie należące do niej, i zwraca pozycji takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy on znajduje się na początku, wtedy wartość prawdziwą, przeciwnie fałszywą. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g78u2p2arh8w9ko2qro0sucurjltg45 552638 552637 2026-08-20T20:07:05Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552638 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe danej ksiązki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znalezionie pozycji takiej linkowej, czyli wartość prawdziwą, przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9bj6saa3ivo66bfoa77gbwkwi883jcr 552639 552638 2026-08-20T20:15:57Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552639 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe (dozwolone) danej ksiązki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom I}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> noydjtqzkk8cajfsywvwf0txf9f42h6 552658 552639 2026-08-21T06:22:52Z Persino 2851 552658 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom III}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe (dozwolone) danej ksiązki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jlf2wd5p1ojha0172g1sj48g18vwof8 552659 552658 2026-08-21T06:24:02Z Persino 2851 /* Ciąg dalszy opisu funkcji */ 552659 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe (dozwolone) danej ksiązki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom III}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> t16e5f3simbhiqbrrzs9amzx8xi0693 552663 552659 2026-08-21T07:07:54Z Persino 2851 552663 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprwdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalazz, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wsród takich liniiznalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}. Dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykół się znajduje, nie więcej, tylko raz, a czy są dalej takie strony w linii, to nie ważne. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tal policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdzaa, jest zmienna: {{LinkPatrz|czy_zeruj}}, czy jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo,nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz z nowa linią, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również opis na zmienną o kluczu {{LinkPatrz|liczba_nie_okladka_artykul}}, lub od tyłu od ostatniego wyszukanego wtedy artykułu, czyli inaczej mówiąc, jest to pozyja poczatkowa pierwszego w odpowiedni sposób wyszukanego nagłówka, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen, a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dziaje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wtwoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe (dozwolone) danej ksiązki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hgsxilcgar1d3uz6kjavn9aa3hdrc0v 552676 552663 2026-08-21T10:17:51Z Persino 2851 552676 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe (dozwolone) danej ksiązki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 80v4sc0ki5fbn3q8hzytzvqi2x54qgi 552677 552676 2026-08-21T10:20:12Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552677 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie sa linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> givprb5x972zdb4t50lsgyp0xinj6nh 552678 552677 2026-08-21T10:20:36Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552678 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozu]yuwnie ono przeszło, to musi istnueć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste, lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza, funkcja: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwraca wartości sugerujące, czy jest to jednak artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, czy inna niedozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, które ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0agre0hbx6hcykcok1m1qzo6k2phbc0 552679 552678 2026-08-21T10:35:21Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552679 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to dozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}) jest jeden, to nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2isww8pfxoi2mxd6f2sognjbp35cjj8 552680 552679 2026-08-21T10:44:11Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552680 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to dozwolona strona, jako artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> siz8e580cpeaa9hbc7is3fvtlllhg2a 552681 552680 2026-08-21T10:47:08Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552681 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Przeciwnie iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pju33clorxad98or2alm8eyjyg6e4ef 552682 552681 2026-08-21T10:51:30Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552682 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunekjest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ixxxyc5ujhlhonn4yvnzm54lpqdb7cn 552683 552682 2026-08-21T10:52:18Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552683 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,false; </syntaxhighlight> Jeżeli taki artykuł nie został znaleziony, to też zostaną zwrócone wartości według {{LinkPatrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 142zgigj5o2hr0d50ad6s279hxweenx 552684 552683 2026-08-21T10:55:38Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552684 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując kodowanie, i znajdowanie tego przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> q299k8ag0w6fmb8tzw9g89ro3n4dp1p 552685 552684 2026-08-21T10:58:00Z Persino 2851 /* {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} */ 552685 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to pozycję tylko artykularną, nawet pozycji rozdziałów zerowych, nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, jeżeli to nie są znaki początku i końca tekstu. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4lq6wufppy0ncsxavjaleo3q9jfs5qb 552686 552685 2026-08-21T11:08:07Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552686 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to jest elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> s5ymg7eg419sht17o9zn0y4etsq4vix 552687 552686 2026-08-21T11:16:55Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552687 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hgd0vjbxi22n6erjnw24fbyantuct5u 552688 552687 2026-08-21T11:31:06Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552688 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nj5hhz7jent8s53ar6t4wsg0yzhbrh5 552689 552688 2026-08-21T11:32:49Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552689 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartośc fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8bzwcjk9k3elotnlroa0vhtoaco4os7 552690 552689 2026-08-21T11:34:13Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552690 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> t10mksqpctngwbvqihm4t0y7h42q2xv 552691 552690 2026-08-21T11:41:22Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552691 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi,jeśli wyszukana linia nie jest rozdziałem z dwukropkiem na końcu, a jeśli jest to początkowi tej linii, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0iy7z7vp1i4towqlsqp147sweaqotq7 552692 552691 2026-08-21T11:45:36Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552692 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, jeśli wyszukana linia nie jest rozdziałem z dwukropkiem na końcu, a jeśli jest to początkowi tej linii, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> b5es2305txt2tor3g9nk8rg8egz3z7i 552693 552692 2026-08-21T11:51:27Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552693 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, jeśli wyszukana linia nie jest rozdziałem z dwukropkiem na końcu, a jeśli jest, to początkowi tej linii, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest, to wszystko w postaci parametrów {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, co później są zwracane parametry według: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mtopaeod93fx94ml5rhbqsbxuw7za2v 552694 552693 2026-08-21T11:53:22Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 552694 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|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.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez tego napisu wprowadzenia tekstu) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_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(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} - czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{LinkPatrz|tab_zmienne}}, * {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} - zmienne w nim do zerowania, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. Parametry funkcji zwracanej dla tekstu rozważanego {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}: * {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} - numer znaku, po którym coś rozważamy, * {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} - numer znaku, przed którym coś rozważamy. Funkcja zwracana sprawdza, czy zmienne: {{LinkPatrz|liczba_koniec_naglowek}} i {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: A jeżeli jest jednak tak, tzn. spełniony jest jednak ten warunek, a nie nie, to znajduje taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: Następnie sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: Funkcja liczy ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z przestrzeni książkowych polskiego {{NS|l=tak|pk=d|w=tak}}, ale danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{Patrz|p.CzyGeneralnieElementSpisuRzeczy}}, jeśli są takie elementy, to funkcja dodaje to do licznika {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. Jeśli liczba określona przez zmienną: {{LinkPatrz|ile_punktowanych}}, jeżeli jest co najmniej równa wyszukanym liniom {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Zerowanie się pewnych wartości: Funkcja z tak policzonego {{LinkPatrz|str}} usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{LinkPatrz|czy_zeruj}}, która jest prawdziwa, a jeśli tak, to elementy zmiennej {{LinkPatrz|tab_zmienne}} są nilowane, tzn. podzmienne o kluczach: * {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje, * {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} - liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle okreslone kryteria : Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, * {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} - wartość prawdziwą wskazuje, jeśli chodzi o ten rozważany rozdział, a ta funkcja rewiduje, czy jest jednak tak, i przy okazji niluje też inne zmienne należące do tablicy, w której są. Ale niezależnie od wartości {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: * {{Code|tekst_rozwiniety_calego_artykulu}} - jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - jak kolejno w: {{LinkPatrz|nazwa_przestrzeni|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{LinkPatrz|nazwa_ksiazki|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tablica_danych_parametrow_szablonu_strony}} - {{LinkPatrz|tablica_danych_parametrow_szablonu_strony|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|tab_nazwa_spisow_przekierowaniowych}} - {{LinkPatrz|tab_nazwa_spisow_przekierowaniowych|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, * {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} - podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać, * {{Code|liczba_obiekt_start_nowe}} - jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{linkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję, jest to pozycja taka na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst, * {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} - numer znaku, od którego ma wyszukiwać od tytułu pewne linie, * {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} - typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}, * {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} - czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{LinkPatrz|liczba_start_rozdzial}}, * {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} - to nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. ; Typy dopasowywania rozdziałów paarametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycji list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja {{LinkPatrz|AnalizowanieSekcjowe}} zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy się tekst przed, która ta ostatnia wspomniana funkcja liczy. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposśób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwraacanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: ; Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty{{dk}} * {{Code|liczba_start_naglowek}} - początek ostatniego wyszukanego takiego nagłówka, * {{Code|liczba_koniec_naglowek_poczt}} - koniec pierwszego wyszukanego nagłówka, * {{Code|naglowek}} - wartość nagłówka dla tego ostatniego dopasowania, * {{Code|poziom_naglowka}} - poziom takiego nagłówka, ; Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym{{dk}} : Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie jest równa znakom odstępu i nie jest pusty: * {{Code|liczba_start_naglowek_dalej}} - początek po pasującym tak nagłówku, * {{Code|liczba_koniec_naglowek_dalej}} - a tutaj jego koniec, * {{Code|naglowek_dalej}} - wartość tekstu napisu wprowadzenia tekstu, * {{Code|poziom_naglowek_dalej}} - tutaj jego poziom. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci wielu typów, ona wie, że w tekście może być równy układ nagłówków różnych typów. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(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,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji ich nie szuka jednego rodzaju tylko, lecz wielu. === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami lub nie będące elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - tekst do sprawdzenia. === Ciąg dalszy opisu funkcji === ; Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu * Etap ogólny Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musiał. ; Etapy alternatywy * Pierwszy etap ** To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka przed nim nie ma. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w pętli nieskończonej, najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. W każdym takim wywołaniu i dopasowaniu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. : Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych: Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. * Drugi ** To dotyczy, że takiego dopasowania pasującego nie znalazł. Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach, a jeżeli to znalazł, to wyszukany stąd nagłówek,jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieje artykuły bieżącej ksiązki, czy analizowanej, i czy to nie jest okładka. Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. * Trzeci ** To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, a w każdym takim wywołaniu po jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. ; Parametry wychodzące z funkcji{{dk}} * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: : Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Wytłumaczenia parametrów zwracanych: ; Parametry określają ostatnie dopasowanie nagłówkowe w wewnątrz funkcji{{dk}} * {{Code|liczba_start_naglowek}} - początek tego dopasowania, * {{Code|liczba_koniec_naglowek}} - jego koniec, * {{Code|naglowek}} - wartość napisu wprowadzenia tekstu nagłówka, * {{Code|poziom_naglowka}} - poziom tego nagłówka. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc funkcja szuka dalej takiego początku dalszego. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w oętli nieskończnonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego wyodrębiona linia jest analizowana bez przerwy, jeżeli istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje parametry: ** {{Code|liczba_start}} {{Patrz|liczba_start}} - od której pozycji od tyłu ma wyszukiwać pozycje artykularne, ** {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} - czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego, ** {{Code|liczba_pierwszy_rozdzialowy_artykul}} - jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: * Początek takiego punktu, uzyskanym w końcu na końcowym obiektu pętli, * Liczba znaków odstępów wykrytych poczasz wszystkich obiektów pętli, * Czy ta tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści. Etapy zwracania przez funkcję elementów: ; Uzyskanie linii według ogólnego wzoru * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linia, byłoby takie coś pomiędzy ewentualnie znakami nowymi liniami, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ; Początek i koniec uzyskanej linii według powyższego sposobu{{dk}} * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ; Brak dopasowania linii * A jeżeli dopasowanie tej linii nie zgłasza niedopasowania, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ; Rozdział równaniowy{{dk}} * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa takich rozdziałów dopasowywać. ; Pierwsze rozgałęzenie specjalne instrukcji warunkowej{{dk}} : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{Patrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. ; Przypadek istnienia linii nie składającej się ze znaków odstępów{{dk}} : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{Patrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, jeśli nie, to fałszywą. ; Przypadek istnienia, lub nie, rozdziału zerowego{{dk}} * Jeśli znaleziono taki rozdział (zerowy), to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, to wtedy funkcja zwraca natychmiast swoje parametry według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. * Przeciwnie, jeśli znaleziono taki spis, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma wartość początkowi takiej linii, a jeżeli przeciwnie, nie ma w nim kodów, to końcowi, jeśli wyszukana linia nie jest rozdziałem z dwukropkiem na końcu, a jeśli jest, to początkowi tej linii, a jeśli jednak ma je, wtedy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii w tej zmiennej, przeciwnie powtarzana jest ta wartość, co na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}{{Code|p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} == Funkcja wyszukuje w tekście, czy w kodzie są linki artykularne nie okładkowe (dozwolone) danej książki lub inne, nie należące do niej, i zwraca pozycję takiej linii, a jako drugi parametr zwraca wartość logiczną sugerująca, czy znaleziono taką pozycję linkową, czyli wartość prawdziwą (niezależnie, czy taką pozycję znaleziono pierwszą, czy którąś z kolei), przeciwnie ta wartość ma przeciwną wartość. Funkcja wyszukuje kolejne zakodowane linie od tyłu. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: * Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, * Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, * Dodatkowo funkcja przyjmuje dodatkowe wartości jako arguementy: ** {{Code|liczba_start_rozdzial}} - jak w: {{LinkPatrz|liczba_start_rozdzial}},pozycja wyszukiwania końcowa, ** {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} - pozycja wyszukiwania początkowa. Parametry zwracane: * Pozycja, w którym taką pozycję określona przez funkcję znaleziono, * Czy ta pozycje wuystępuje w pierwszej kolejności jako pozycja szablonowa w linii spisowej. Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje kolejne linie przy pomocy funkcji: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment kodu jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}} oraz musi być spełniona alternatywa dwóch warunków: {{Code|przed_tekst}} {{Patrz|przed_tekst}} musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Dla pierwszego kodu szablonu znalezionego w linii funkcja sprawdza tym: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, zwracająca wartości sugerujące, czy jest to jednak w ogóle artykuł, numer rodzaju artykułu, czy {{ZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} artykuł to okładka, albo może być to niedozwolona strona, jako część książki, ale nie może być traktowana jako jego treściwy artykuł. Jeżeli ten kod sugeruje dla uzyskanej zmiennej {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} (uzyskanej z: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, mając dwie wartości, tzn. {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod_szablon}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, która ta wartość jest zamieniana na liczbę), liczymy z tego {{ZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} zmienne artykularne ({{Code|czy_element_spisu}} {{Patrz|czy_element_spisu}}), numer rodzaju artykułu ({{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}), i sprawdzamy, czy ona jest równa jeden, i czy nie jest {{LinkZobaczTeż|niedozwolona strona-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}} ({{Code|czy_okladka}} {{Patrz|czy_okladka}}), lub numer rodzaju artykułu {{LinkPatrz|numer_rodzaju_artykulu}} jest inny niż jeden, wtedy funkcja zwraca dwie po kolei wartości według źródła {{Patrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> Jeżeli takiej wartości nie znalazł, wtedy aby zwrócić cokolwiek, wtedy iterujemy po dalszym {{Code|dalszy_tekst}} iteratorem szablonowym z modułu: {{Code|{{m|Szablonowe}}}}, i w każdym okrążeniu pętli znajdujemy trzy wartości: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy/Tom II}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, do którego wykorzystujemy funkcję: {{LinkPatrz|p.CzyGeneralnieElementSpisuRzeczy}}, z którego uzyskujemy wartości i sprawdzamy warunek jak w punkcie: {{LinkZobaczTeż|zmienne artykularne-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, jeśli ten warunek jest spełniony, wtedy zostanie zwrócona wartość, jak w: {{LinkPatrz|poprawnie-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}. W innych przypadkach w funkcji zrzucany jest wynik mówiący, że takiego dopasowania nie znalazł {{Patrz|wartość spisowa-p.LinkiNormalneWLubPozaProjektoweSzablonyNieSekcjowychPozycjach}}, wtedy zrzucamy wynik, którego pierwsza wartość jest powtórzeniem parametru wsadzonego do naszej funkcji: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qciw6lt6jibowtlqqymp6qwvxbnrdgf